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

本文共 2704 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>