c语言和系统的文件接口

一、C语言的文件接口

1、打开文件

  • 函数:
  • 参数:

filename :打开在参数 filename 中指定其名称的文件,并将其与在将来的作中可以通过返回的FILE 指针标识的流相关联。

mode:以mode的权限打开,权限有一下几种

  • 返回值

返回一个文件指针,该指针指向被执行的文件。

  • 代码

    cpp 复制代码
    FILE *fd=fopen("myfile","w")
    //以只写的方式打开文件

2、文件写入

  • 函数:

  • 参数:

prt:该指针指向需要写入文件的内容

size:每个元素的大小,以字节为单位

count:元素的个数

stream:需要写入到的文件

  • 返回值:

写入成功将返回写入元素的个数

  • 代码:
cpp 复制代码
const char buffer[]={'a','b','c'};
FILE *fd=fopen("myfile","w");
fwrite(buffer,sizeof(char),sizeof(buffer),fd);
//向"myfile"文件中写入abc

3、文件读取

函数:

参数:

ptr:一个指向大小至少为count的内存块的指针

size:要读取的每个元素的大小

count:要读取的元素个数

stream:指向要读取的文件的指针

返回值:

读取成功就返回读取元素的个数

代码:

cpp 复制代码
char buffer[1024];
FILE *fd=fopen("myfile","r");
fread(buffer,sizeof(char),sizeof(buffer),fd);
//向"myfile"文件中读取

4、关闭文件

函数:

参数:

stream:指向需要关闭的文件的文件指针

返回值:

关闭成功返回0,失败则返回-1

代码:

cpp 复制代码
FILE *fd=fopen("myfile","r");
int n=fclose(fd);
//关闭文件"myfile"

二、系统文件接口

1、打开文件

  • 函数:

    cpp 复制代码
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);
  • 作用:

打开一个文件

  • 参数:

pathname:要打开的文件的名称

flags :

**mode:**如果flags中选择了O_CREAT时该文件的最终权限由mode和unmask共同决定

  • 返回值:

打开成功就返回该文件的文件描述符,否则返回-1

  • 代码:
cpp 复制代码
// 只读打开现有文件
int fd = open("/etc/passwd", O_RDONLY);
if (fd == -1) { perror("open"); }

// 创建新文件并设置权限(若存在则报错)
fd = open("newfile.txt", O_WRONLY | O_CREAT | O_EXCL, 0644);

2、写文件

  • 函数:
cpp 复制代码
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
  • 作用:

向文件中写入

  • 参数:

fd:需要写入内容的文件描述符

buf:需要写入的内容

count:需要写入内容的大小以字节为单位

  • 返回值:

成功时返回实际写入内容的大小,失败返回-1

  • 代码:
cpp 复制代码
ssize_t total = 0;
while (total < count) {
    ssize_t n = write(fd, buf + total, count - total);
    if (n == -1) {
        if (errno == EINTR) continue; // 被中断则重试
        break; // 其他错误处理
    }
    total += n;
}

3、文件读取

  • 函数:
cpp 复制代码
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
  • 作用:

向指定文件读取内容

  • 参数:

fd:标识要读取的目标文件或设备(如普通文件、管道、套接字等)

buf:指向用户分配的内存区域,用于存储读取的数据

count:指定本次read请求读取的最大字节数

  • 返回值:
  • 代码:
cpp 复制代码
ssize_t total = 0;
while (total < count) {
    ssize_t n = read(fd, buf + total, count - total);
    if (n == -1) {
        if (errno == EINTR) continue;
        break;
    } else if (n == 0) {
        break;  // EOF
    }
    total += n;
}

4、关闭文件

  • 函数:
cpp 复制代码
#include <unistd.h>
int close(int fd);
  • 作用:

关闭已经打开的文件

  • 参数:

fd:需关闭的文件描述符,必须是有效的、已打开的描述符

返回值:

  • 代码:
cpp 复制代码
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main() {
    int fd = open("example.txt", O_RDWR);  // 打开文件
    if (fd == -1) {
        perror("open failed");
        return 1;
    }

    // 文件操作(如 read/write)
    char buf[1024];
    ssize_t n = read(fd, buf, sizeof(buf));

    // 关闭文件并检查错误
    if (close(fd) == -1) {
        perror("close failed");
        return 1;
    }
    return 0;
}
相关推荐
姜鱼问生5 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*5 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP6 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_7 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时7 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
hz567899 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC9 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
优橙教育9 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
IT研究所9 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
BLUcoding9 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom