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

    你可能感兴趣的文章
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    nginx+Tomcat性能监控
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>