Linux下的open、read、write函数的简单介绍

发布时间 2023-03-26 12:07:09作者: nakejimamiyuki

记录Linux下的open、read、write函数的参数以及简单使用

open函数

首先在Linux下,使用命令man 2 open打开说明文档,可以看到open函数的头文件以及函数参数信息:

  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>


    //第一个open函数只能打开一个已经存在的文件
    `int open(const char *pathname, int flags);`

    参数:
        -pathname:要打开文件的路径
        -flags:对文件的操作权限设置以及其他设置,其参数可以包括为:O_RDONLY, O_WRONLY, or O_RDWR,并且这三个参数是互斥的,也就是一次只能选用一个。
    返回值:
        返回一个int类型的文件操作符,如果失败返回-1
    

    函数perror(使用man 3 perror查看文档):
        #include <stdio.h>

        void perror(const char *s);
        作用:打印error对应的错误信息
        参数s:用户描述

下面是两个参数的open函数使用案例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(){

    int fd = open("./test.txt",O_RDONLY);

    if(fd == -1)
        perror("open");

    close(fd);

    return 0;
}

perror函数返回:open: No such file or directory

//创建一个文件
`int open(const char *pathname, int flags, mode_t mode);`
参数:
    - pathname:想要创建文件的路径
    - flags:对文件的操作权限和其他设置
        - 必选项:O_RDONLY, O_WRONLY, or O_RDWR 这三个之间是互斥的
        - 可选项:O_CREAT 若文件不存在,则创建该文件
    - mode:八进制的数,设置创建出的新文件的权限

下面是三个参数open函数的一个简单案例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(){

    int fd = open("./test.txt",O_RDONLY | O_CREAT,0777);

    if(fd == -1)
        perror("open");

    close(fd);

    return 0;
}

执行和返回结果如下图:

创建出一个test.txt文件。

read函数

首先在Linux下,使用命令man 2 read打开说明文档,可以看到read函数的头文件以及函数参数信息:

    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);
  
    参数:
        - fd:文件描述符,通过open得到的文件描述符来操作文件
        - buf:需要读取数据存放的地方,数组的地址
        - count:指定数组的大小
    返回值:
        - 成功:
            >0:返回实际读取到的字节数
            =0:读取到文件尾
        - 失败:-1,并设置error,可用perror函数查看
            

首先在Linux下,使用命令man 2 write打开说明文档,可以看到write函数的头文件以及函数参数信息:

    #include <unistd.h>

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

    参数:
        - fd:文件描述符,通过open得到的文件描述符来操作文件
        - buf:要往磁盘写入的数据
        - count:要写数据的指定的大小
    
    返回值:
        - 成功:实际写入的字节数
        - 失败:返回-1,并设置error

下面为read和write函数的案例:


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(){

    int fd = open("./poem.txt",O_RDONLY);
    if(fd == -1){
        perror("open");
        return -1;
    }
    

    int fdn = open("./cpy.txt",O_WRONLY | O_CREAT,0664);
    if(fdn == -1){
        perror("open");
        return -1;
    }

    //写操作
    char buff[1024] = {0};
    int len = 0;
    while((len = read(fd,buff,sizeof(buff))) > 0)
        write(fdn,buff,len);

    close(fdn);
    close(fd);
    return 0;
}

运行结果会把poem.txt文件里的内容copy到cpy.txt文件里: