Linux里read函数和write函数使用

接口:在<unistd.h>里
extern ssize_t write (int __fd, const void *__buf, size_t __n);
extern ssize_t read (int __fd, void *__buf, size_t __nbytes);

一、write()
1.参数一为被写入的文件对应的文件描述符,第二个参数为缓存区,第三个参数为写入的字节数
2.功能:将buf里的数据写入fd对应的文件,以n为写入单位
3.返回值:返回写入的字节数,-1表示写入失败

二、read()
1.参数一为被读取的文件对应的文件描述符,第二个参数为缓存区,第三个参数为读取的字节数
2.功能:读取fd对应的文件,并将读取的数据保存到buf,以nbytes为读取单位
3.返回值:返回读取的字节数,-1表示读取失败,0表示读取结束

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

int main(void)
{
    //只读模式打开文件
    int fd1 = open("test.txt",O_RDONLY);  
    if(fd1 == -1){
        perror("open test.txt");
        exit(1);
    }
    else 
        printf("fd1 = %d\n",fd1);

    //创建文件,并在该程序中以写模式打开
    int fd2 = open("newtest.txt", O_CREAT | O_WRONLY, 0664);
    if(fd2 == -1){
        perror("open newtest.txt");
        exit(1);
    }
    else 
        printf("fd2 = %d\n",fd2);
  
    char buf[1024] = {0};
    int r_count = read(fd1, buf, sizeof(buf)); //读取fd1代表的文件,以sizeof(buf)为读取单位,将读取的数据保存到buf
    if(r_count == -1){     //读取失败
        perror("read fd1");
        exit(1);
    }
    else 
        printf("read bytes = %d\n",r_count); //读取成功返回读取的字节数
    int w_count = 0;
    while(r_count != 0){   //为0表示读到文件结尾,读取结束
        w_count = write(fd2, buf, r_count); //将buf里的数据写入到fd2代表的文件中,以r_count为一次写入单位(读取多少就写入多少)
        printf("write bytes %d\n",w_count); //写入成功返回写入的字节数
        r_count = read(fd1, buf, sizeof(buf));
        printf("read bytes = %d\n",r_count);
    }
    close(fd1);
    close(fd2);

    return 0;
}

测试结果:

fd1 = 3
fd2 = 4
read bytes = 1024
write bytes 1024
read bytes = 1024
write bytes 1024
read bytes = 1024
write bytes 1024
read bytes = 367
write bytes 367
read bytes = 0
-rw-rw-r-- 1 zhangqu zhangqu 3439 5月   8 21:55 newtest.txt
-rw-rw-r-x 1 zhangqu zhangqu 3439 5月   8 21:08 test.txt
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值