open read, write函数

432 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

open函数

Linux操作系统中的open函数用于打开文件并创建新的文件描述符。它在fcntl.h头文件中定义。

pathname参数是一个字符串,指定要打开的文件的路径。flags参数指定打开文件的模式,mode参数指定如果创建文件时的权限。

#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include<unistd.h>
//int open(const char *pathname, int flags, mode_t mode);
//     -- flags must include O_RDONLY, O_WRONLY, or O_RDWR
//     -- 

int main() {
    int fd = open("create.txt", O_RDWR|O_CREAT, 0777);

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

    close(fd);
    return 0;
}

read, write函数

Linux操作系统中的read函数用于从文件中读取数据。它在unistd.h头文件中定义。

fd参数是文件描述符,指定要从其中读取数据的文件。buf参数是指向缓冲区的指针,缓冲区用于存储从文件中读取的数据。count参数是要读取的字节数。

read函数返回实际读取的字节数。如果已到达文件末尾,则返回0。如果发生错误,则返回-1,并将errno全局变量设置为指示错误。

Linux操作系统中的write函数用于向文件中写入数据。它在unistd.h头文件中定义。

fd参数是文件描述符,指定要向其中写入数据的文件。buf参数是指向缓冲区的指针,缓冲区存储要写入文件的数据。count参数是要写入的字节数。

write函数返回实际写入的字节数。如果发生错误,则返回-1,并将errno全局变量设置为指示错误。

    #include <unistd.h>

    ssize_t read(int fd, void *buf, size_t count);
        参数:
            -fd:文件描述符,open得到的,通过这个文件描述符操作某个文件
            -buf:需要读取数据存放的地方,数组的地址
            -count:指定的数组的大小
        返回值:
            -成功:
                >0:返回实际的读取到的字节数
                =0:文件已经读取完了
            -失败:-1,并且设置errno
    #include <unistd.h>

    ssize_t write(int fd, const void *buf, size_t count);
        参数:
            -fd:文件描述符,open得到的,通过这个文件描述符操作某个文件
            -buf:要往磁盘写入的数据,数据
            -count:要写的数据的实际的大小
        返回值:
            成功:实际写入的字节数
            失败:返回-1,并设置errno
*/
#include <unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
    //通过open打开english.txt文件
    int srcfd = open("english.txt", O_RDONLY);
    if (srcfd == -1) {
        perror("open");
        return -1;
    }
    //创建一个新的文件(拷贝文件)
    int destfd = open("cpy.txt", O_WRONLY | O_CREAT, 0664);
    if (destfd == -1) {
        perror("open");
        return -1;
    }
    //频繁的读写操作
    char buf[1024] = {0};
    int len = 0;
    while((len = read(srcfd, buf, sizeof(buf))) > 0) {
        write(destfd, buf, len);
    }
    //关闭文件
    close(destfd);
    close(srcfd);
    return 0;
}