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

 更新时间:2026年08月25日 09:38:06   作者:昒曦  
还在为read和write函数的使用发愁吗?本文详细解析了read()和write()的参数、返回值及常见问题,帮你轻松掌握文件读写操作,避免读取失败或写入错误的坑

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);
     }
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Centos服务器搭建Squid Http代理请求服务器教程

    Centos服务器搭建Squid Http代理请求服务器教程

    文章总结了作者在配置系统服务时的个人经验,包括生成密码文件、测试密码文件配置、启动服务、配置副本(包括无权限控制和权限控制)等步骤,并鼓励读者参考和使用脚本之家
    2025-12-12
  • Linux的GPIO驱动程序使用详解

    Linux的GPIO驱动程序使用详解

    文章详细解析了Linux系统中GPIO驱动程序的结构及多层抽象,说明了从硬件寄存器到内核与用户空间API的实现过程,并通过具体开发板实例,展示了驱动注册、访问与共享机制,总结:Linux GPIO驱动层次清晰,保障了平台兼容性与安全访问
    2025-10-10
  • Linux下rz/sz安装及使用方法示例

    Linux下rz/sz安装及使用方法示例

    这篇文章主要介绍了Linux下rz/sz安装及使用方法示例,详细的介绍了如何使用和安装rz/sz,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Linux使用fdisk进行磁盘的相关操作

    Linux使用fdisk进行磁盘的相关操作

    fdisk 命令是 Linux 中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下
    2025-01-01
  • linux删除 buff/cache缓存的操作方法

    linux删除 buff/cache缓存的操作方法

    这篇文章主要介绍了linux删除 buff/cache缓存的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-04-04
  • Linux下实现修改时区为东八区

    Linux下实现修改时区为东八区

    这篇文章主要介绍了Linux下实现修改时区为东八区,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-06-06
  • Linux基础之终端、控制台、tty、pty简介说明

    Linux基础之终端、控制台、tty、pty简介说明

    本文主要讲解了Linux系统下的终端、控制台、tty、pty简单介绍,虽然是基础内容但非常重要,大家一定要理解
    2018-03-03
  • Linux配置交换空间(Swap)解决内存不足的具体教程

    Linux配置交换空间(Swap)解决内存不足的具体教程

    在 CentOS 系统中,交换空间(Swap)用于在物理内存不足时,临时将部分数据存储到硬盘上,以释放内存供其他进程使用,合理配置交换空间可以提升系统的稳定性和性能,本文给大家介绍了Linux使用配置交换空间(Swap)解决内存不足的具体教程,需要的朋友可以参考下
    2025-08-08
  • Linux中网络调试常用命令的使用完全指南

    Linux中网络调试常用命令的使用完全指南

    网络问题是 Linux 运维和开发中最高频的故障来源,掌握常用的网络调试命令,能快速定位连通性、DNS、端口、路由和性能问题,本文系统整理了 Linux 网络调试的核心工具与实战技巧,希望对大家有所帮助
    2026-08-08
  • Linux之TCP和守护进程详解

    Linux之TCP和守护进程详解

    本文系统讲解了TCP网络编程实现,涵盖服务端创建(套接字、绑定、监听)、多进程/线程处理、客户端连接管理及守护进程设计,重点解析了TCP三次握手、四次挥手、全双工通信机制与连接状态管理
    2025-08-08

最新评论