博客
关于我
基于Linux中io操作详解,open()、write()、read()、close()
阅读量:608 次
发布时间:2019-03-13

本文共 2720 字,大约阅读时间需要 9 分钟。

基于Linux中的文件操作详解

文件操作是Linux系统中常见的基础操作之一,主要包含打开文件、写入文件、读取文件和关闭文件等几个关键步骤。这些操作通过文件描述符(file descriptor)进行处理,与文件进行读写操作。

打开文件(open()函数)

打开文件的主要操作由open()函数完成,函数可以按需创建文件或打开现有文件。使用open()函数时,需要注意以下几个关键点:

必须包含的头文件

#include 
#include
#include

函数原型

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

参数说明

  • pathname:指定要打开或创建的文件路径。
  • flags:定义文件打开的方式,可用的常量包括:
    • O_RDONLY:只读模式
    • O_WRONLY:只写模式
    • O_RDWR:读写模式
    • O_CREAT:如果文件不存在则创建
    • O_APPEND:追加写入,内容附加到末尾
    • O_TRUNC:截断文件长度,设置为0
  • mode(可选):指定新文件的访问权限,常用参数有:
    • S_IRUSR:文件所有者读取权限
    • S_IWUSR:文件所有者写入权限
    • S_IRGRP:文件组成员读取权限
    • S_IWGRP:文件组成员写入权限
    • S_IROTH:其他用户读取权限
    • S_IWOTH:其他用户写入权限
  • 返回值

    • 成功:返回新的文件描述符
    • 失败:返回-1,并设置错误信息errno

    示例代码

    int filefd;
    if ((filefd = open("test.txt", O_RDWR | O_CREAT | O_TRUNC, 0666)) == -1) {
    printf("文件打开失败,错误信息为:%s\n", strerror(errno));
    return -1;
    }

    写入文件(write()函数)

    write()函数用于将数据从程序写入开放的文件。该函数接收三个参数:

    • fd:文件描述符
    • buf:要写入的数据缓冲区
    • count:要写入的字节数

    函数原型

    ssize_t write(int fd, const void *buf, size_t count);

    返回值

    • 成功:返回实际写入的字节数
    • 失败:返回-1,并设置错误信息errno

    示例代码

    if (rv = write(filefd, "Hello world!\n", strlen("Hello world!\n")) < 0) {
    printf("写入失败,错误信息为:%s\n", strerror(errno));
    return -1;
    }

    读取文件(read()函数)

    read()函数用于从文件中读取数据。调用时需要指定缓冲区和要读取的字节数。函数返回实际读取的字节数:

    函数原型

    ssize_t read(int fd, void *buf, size_t count);

    参数说明

    • fd:文件描述符
    • buf:读取到缓冲区
    • count:要读取的数据长度

    返回值

    • 成功:返回读取的字节数
    • 失败:返回-1,并设置错误信息errno
    • 当已读到末尾时,返回0

    示例代码

    char buf[1024];
    memset(buf, 0, sizeof(buf)); // 确保缓冲区初始为空
    if (rv = read(filefd, buf, sizeof(buf)) < 0) {
    printf("读取失败,错误信息为:%s\n", strerror(errno));
    return -1;
    }

    关闭文件(close()函数)

    close()函数用于关闭已经打开的文件,释放系统资源。函数接收文件描述符作为参数:

    函数原型

    int close(int fd);

    返回值

    • 成功:返回0
    • 失败:返回-1,并设置错误信息errno

    完整示例代码

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define BUF_SIZE 1024 #define CONTENT "Hello World\n" int main(int argc, char **argv) { int filefd; int rv; char buf[BUF_SIZE]; // 打开文件 if ((filefd = open("test.txt", O_RDWR | O_CREAT | O_TRUNC, 0666)) == -1) { printf("文件打开失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("成功打开文件,文件描述符为:%d\n", filefd); // 写入文件 if ((rv = write(filefd, CONTENT, strlen(CONTENT))) < 0) { printf("写入文件失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("已成功写入文件%d字节\n", rv); // 读取文件 memset(buf, 0, sizeof(buf)); // 初始化缓冲区 rv = read(filefd, buf, sizeof(buf)); if (rv < 0) { printf("读取文件失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("读取结果:\n%s\n", buf); // 关闭文件 if ((rv = close(filefd)) < 0) { printf("文件关闭失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("所有操作完成\n"); return 0; }

    以上代码示例展示了使用open、write、read和close函数完整的文件操作流程,并确保每一步都进行了错误处理和资源释放。通过合理使用这些函数,开发者可以对文件进行读写操作,实现文件管理的需求。

    转载地址:http://idkaz.baihongyu.com/

    你可能感兴趣的文章
    nginx 代理解决跨域
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 多端口配置和访问异常问题的排查与优化
    查看>>
    Nginx 如何代理转发传递真实 ip 地址?
    查看>>
    Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>