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

    你可能感兴趣的文章
    Objective-C实现aliquot sum等分求和算法(附完整源码)
    查看>>
    Objective-C实现all combinations所有组合算法(附完整源码)
    查看>>
    Objective-C实现all permutations所有排列算法(附完整源码)
    查看>>
    Objective-C实现all subsequences所有子序列算法(附完整源码)
    查看>>
    Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
    查看>>
    Objective-C实现alternate disjoint set不相交集算法(附完整源码)
    查看>>
    Objective-C实现alternative list arrange备选列表排列算法(附完整源码)
    查看>>
    Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
    查看>>
    Objective-C实现anagrams字谜算法(附完整源码)
    查看>>
    Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
    查看>>
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现argmax函数功能(附完整源码)
    查看>>
    Objective-C实现arithmetic算术算法(附完整源码)
    查看>>
    Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
    查看>>
    Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
    查看>>
    Objective-C实现average mean平均数算法(附完整源码)
    查看>>
    Objective-C实现average median平均中位数算法(附完整源码)
    查看>>
    Objective-C实现average mode平均模式算法(附完整源码)
    查看>>