当前位置: 代码网 > 服务器>服务器>Linux > Linux中的read()、write()函数用法详解

Linux中的read()、write()函数用法详解

2026年08月25日 Linux 我要评论
read()函数用来读取打开文件的数据;write()函数将数据写入一个已打开的文件中。read()函数头文件和函数原型 #include <unistd.h> ssize_t r

read()函数用来读取打开文件的数据;write()函数将数据写入一个已打开的文件中。

read()函数

头文件和函数原型

   #include <unistd.h>
   ssize_t read(int fd, void *buf, size_t count);
   // ssize_t 是有符号整数类型;size_t是无符号整数类型

参数

  • fd:文件描述符(文件名或文件路径)
  • buf:存放输入数据的内存缓冲区地址
  • count: 指定最多能读取的字节数

返回值

  • 读取成功:返回的是读取到的字节数
  • 读取到文件尾:0
  • 读取失败:-1

实例

/*
读取文件数据,返回读取的字节数据值
*/
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#define size 1024
int main(int argc,char *argv[]){
        //argc表示输入命令参数的个数,*argv[]代表每个命令的值
        //如命令为 ./read  file.txt
        //则 argv[0]---> ./read
        //   argv[1]----> file,txt
        int fd;
        char buf[size]; //设置缓冲区大小
        if (argc < 2){  //输入命令是否正确
          perror("input './a.out filename'");
          exit(1);
        }
        fd = open(argv[1],o_rdonly | o_creat,0664); //打开文件,没有就创建
        if (fd == -1){
           perror("open error");
           exit(1);
        }
        int count = read(fd,buf,sizeof(buf));   //读取大小最多为sizeof(buf)大的文件数据
        printf("the %s size is %d\n",argv[1],count);
        close(fd);
}

write()函数

头文件与函数原型

 #include <unistd.h>
 ssize_t write(int fd, const void *buf, size_t count);

参数

与read()函数类似

  • fd:文件描述符(文件名或文件路径)
  • buf:要写入文件中数据的内存地址
  • count:  buf 写入文件的数据字节数

返回值

  • 写入成功: 返回 实际写入的字节数  
  • 写入失败:-1

read()、write()函数的使用

// 利用write() 、read()函数实现复制文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define size 1024
int main(int argc,char *argv[]){
     int fd,fd1,count,count1;
     char buf[size];
     //打开要读取数据的文件
     fd = open(argv[1],o_rdonly);
     if(fd == -1){
        perror(argv[1]);
        exit(1);
     }
     //打开放置读取数据的文件,没有就创建文件
     fd1 = open(argv[2],o_wronly | o_creat,0664);
     if(fd1 == -1){
        perror(argv[2]);
        exit(1);
     }
     while (count > 0){
     count = read(fd,buf,sizeof(buf));
     if (count == -1){
        perror("read data error");
        exit(1);
     }
     count1 = write(fd1,buf,count);
     if (count1 == -1){
        perror("write data error");
        exit(1);
     }
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com