系统调用read/write函数

本文详细解释了在Linux中read和write函数在文件I/O操作中的作用,包括参数、返回值和错误处理,以及一个使用这两个函数进行文件复制的示例。

当涉及文件 I/O 时,readwrite 函数是非常关键的。它们允许从文件中读取数据或将数据写入文件。以下是更详细的解释和示例:

1.ssize_t read(int fd, void *buf, size_t count);

  • fd 是文件描述符,表示要从中读取数据的文件。
  • buf 是一个指向存储读取数据的内存缓冲区的指针。
  • count 是要读取的字节数。

返回值:

  • 如果成功读取数据,read 返回实际读取的字节数(非负整数)。
  • 如果已经到达文件的末尾(EOF),read 返回 0。
  • 如果发生错误,read 返回 -1,并设置全局变量 errno 以指示错误类型。

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

  • fd 是文件描述符,表示要写入数据的文件。
  • buf 是一个指向包含要写入的数据的内存缓冲区的指针。
  • count 是要写入的字节数。

返回值:

  • 如果成功写入数据,write 返回实际写入的字节数。
  • 如果发生错误,write 返回 -1,并设置全局变量 errno 以指示错误类型。

/*

       #include <unistd.h>
       1. ssize_t read(int fd, void *buf, size_t count);
                参数:
                    -fd : 文件描述符,open得到的,通过文件描述符操作某个文件
                    -buf : 需要读取数据存取的地方,数组的地址(传出参数)
                    -count :指定数组的大小
                返回值:
                    -成功:
                        >0  : 返回实际读取到的字节数
                        =0  :文件已经读取完了
                    -失败:
                        -1  :并且设置errno
        2. 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 test1(){
    //1 .
    int srcfd = open("F:\\C++\\C++\\c++linux\\linux_io_fun\\examples.txt",O_RDONLY);
    if(srcfd==-1){
        perror("open");
        return -1;
    }
    //2.
    int destfd = open("F:\\C++\\C++\\c++linux\\linux_io_fun\\cpy.txt",O_WRONLY|O_CREAT,0664);
    if(destfd==-1){
        perror("open");
        return -1;
    }
    // 3. 读写操作
    char buf[1024]={0};

    int len =0;
    while((len=read(srcfd,buf,sizeof(buf)))>0){
        write(destfd,buf,len);
    }
    // 4. 关闭文件
    close(destfd);
    close(srcfd);
}

int main(){
    test1();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值