博客
关于我
基于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/

    你可能感兴趣的文章
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错fatal: Could not read from remote repository
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    npm,yarn,cnpm 的区别
    查看>>
    NPOI
    查看>>