【Linux系统IO函数】read、write函数及实现文件拷贝_read函数实现-程序员宅基地

技术标签: read  Linux  linux  读写文件  write  

Linux系统—read、write函数

ssize_t read(int fd, void *buf, size_t count);
//将文件中的数据读入内存

ssize_t write(int fd, const void *buf, size_t count);
//把内存中的数据写入到文件里

实现文件拷贝:
在这里插入图片描述

1.1 read函数

输入以下命令查看函数帮助文档:

man 2 read/write
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
  • 参数
    • fd: 文件描述符,open得到的,通过这个文件描述符操作某个文件
    • buf:需要读取数据存放的地方,数组的地址传出参数
      • 传出参数:传入一个空的数组进去,函数将内容保存到数组后,可以通过数组取数据
    • count:指定的数组的大小
  • 返回值
    • 成功
      • >0:返回实际的读取到的字节数
      • =0:文件已经读取完了
    • 失败:返回-1,并且设置errno

1.2 write函数

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

1.3 实现文件拷贝

编写copyfile.c:

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

int main() {
    

    // 1. 通过open打开english.txt文件,只读
    int srcfd = open("english.txt", O_RDONLY);

    if(srcfd == -1) {
    
        perror("open");
        return -1;
    }
    // 2. 创建一个新的文件(拷贝文件),只写
    int destfd = open("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(srcfd);
    close(destfd);
    
    return 0;
}

在终端中GCC编译并运行,得到拷贝文件cpy.txt

fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ls
copyfile.c  english.txt
fuerer@fuerer-virtual-machine:~/Linux/lesson10$ gcc copyfile.c -o copy
fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ls
copy  copyfile.c  english.txt
fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ./copy
fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ll
总用量 280
drwxrwxr-x  2 fuerer fuerer   4096 324 10:31 ./
drwxrwxr-x 11 fuerer fuerer   4096 324 10:02 ../
-rwxrwxr-x  1 fuerer fuerer   8528 324 10:31 copy*
-rw-rw-r--  1 fuerer fuerer   1792 324 10:31 copyfile.c
-rw-rw-r--  1 fuerer fuerer 129772 324 10:31 cpy.txt
-rw-rw-r--  1 fuerer fuerer 129772 324 10:21 english.txt

cpy.txt与english.txt大小均为 129772 个字节

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fu_GAGA/article/details/123704971

智能推荐

多元线性回归分析(Stata)_stata多元回归-程序员宅基地

文章浏览阅读4.5w次,点赞69次,收藏630次。回归分析的介绍与分类回归分析的任务是:通过研究自变量X和因变量Y的关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的三个关键字:相关性、因变量Y、自变量X常见的回归分析有五类(划分的依据是因变量Y的类型): 线性回归:因变量Y为连续性数值变量,例如GDP的增长率 0-1回归:因变量Y为0-1型变量,例如P2P公司研究借款人是否能按时还贷,那么Y可以设计为二值变量,Y=0时代表可以还贷,Y=1时代表不能还贷 定序回归:因变量Y为定序变量,例如1表示不喜欢,2._stata多元回归

mac环境下编译opencv源码 Java 并生成JAR包-程序员宅基地

文章浏览阅读1.2k次。一、准备工作 1、安装ant,并配置环境变量 2、下载CMake,我这边用的是CMAKE GUI 3、下载opencv源码 这是下载地址 二、开始 之前尝试过用brew直接安装ant,均提示404并试过,后面实在没有办法就直接去了这里下载,如图: 下载解压,然后通过【终端】配置..._opencv源码java

有孚网络北京云数据中心荣获绿色建筑国际LEED金牌认证和国家CQC A级机房认证...-程序员宅基地

文章浏览阅读735次。中国IDC圈报道,2018年1月16日,上海有孚网络股份有限公司(以下简称有孚网络)北京永丰E-Data云计算数据中心荣获国家CQC A级机房认证和国内首个国际LEED绿建金牌认证,CQC中国质量认证中心肖处长、美国绿色建筑委员会(USGBC)和绿色事业认证公司(GBCI)总裁兼首席执行官马晗、中国计量科学研究院武主任、有孚网络CEO安柯、有孚网络CS..._cqc 数据中心a级认证

红点中国完成新一期4亿美元基金募集 -程序员宅基地

文章浏览阅读103次。消息,红点创投中国基金(下简称“红点中国”)宣布完成新一期4亿美元基金的募集。其中3亿美元将继续布局TMT行业及其细分领域里优秀的早期项目,约80%以上的资金用于布局A轮及更早阶段的项目。另外1亿美元则是用于加注高潜力高成长的领跑项目。 这是红点中国独立运营两年多以来募集完成的第三支基金。尽管资本环境在过去一段时间内有一些波动,但红点中国团队依然保...

微软必应(Bing)打不开解决方案(2021.12.16)_必应打不开-程序员宅基地

文章浏览阅读3.4w次,点赞10次,收藏18次。问题描述2021.12.16开始必应就打不开了。。解决方案1. 打开主页将原先网址https://cn.bing.com/更换为https://www4.bing.com/2. 更改浏览器默认主页以Chrome为例,打开chrome://settings/onStartup或设置中选择启动时将网址修改为https://www4.bing.com/3. 更改浏览器默认搜索引擎打开网址chrome://settings/searchEngines或设置中选择搜索引擎网址格式添加为htt_必应打不开

机器学习——聚类算法-层次聚类算法-程序员宅基地

文章浏览阅读676次,点赞15次,收藏7次。层次聚类算法是一种无需预先指定簇数的聚类方法,它通过计算样本之间的相似度来构建聚类树,从而得到样本之间的聚类关系。本文介绍了层次聚类算法的原理、步骤以及Python实现的示例代码。通过层次聚类算法,可以对数据集进行探索性分析,发现数据中的内在结构和模式。

随便推点

keil出现unrecognized character escape sequence(无法识别的字符转义序列)错误_warning: #192-d: unrecognized character escape seq-程序员宅基地

文章浏览阅读5.9k次。我们在使用编程软件进行编程时,可能会使用一些特殊字符或者转义字符,这时候如果不注意就会出错从而出现unrecognized character escape sequence的错误比如我今天写’'的时候就出现了该错误,这是因为""在C语言中有特殊的用法**,想要表示"" 就要使用"\"来表示**..._warning: #192-d: unrecognized character escape sequence

基于机器学习的多模态检索研究_多模态图像检索算法流程图解-程序员宅基地

文章浏览阅读1k次。近年来,随着深度学习技术的发展,人们对于多模态数据检索的研究和应用越来越受到关注。然而,多模态数据的特点和其间的异质性导致多模态检索面临诸多挑战。本文对基于生成对抗网络的多模态检索方法进行了综述和分析,该方法具有以下特点:通过生成器和判别器编码多样数据并学习它们的共性,在特征提取和多模态匹配两个阶段实现自动化。在特征提取阶段,使用深度学习模型,如卷积神经网络和循环神经网络,提取不同类型数据的特征,并采用多任务学习策略,使提取网络最小化误差并获得低维特征表示。在多模态匹配阶段,通过生成对抗网络将不同类型特征_多模态图像检索算法流程图解

力扣315计算右侧小于当前元素的个数-程序员宅基地

文章浏览阅读71次。代码】力扣315计算右侧小于当前元素的个数。

pyhton object is not subscriptable 解决_polygon' object is not subscriptable-程序员宅基地

文章浏览阅读6.9w次,点赞2次,收藏6次。这是网上的错误例子:dicts = [ {'name': 'Michelangelo', 'food': 'PIZZA'}, {'name': 'Garfield', 'food': 'lasanga'}, {'name': 'Walter', 'food': 'pancakes'}, {'name': 'Galactus', ..._polygon' object is not subscriptable

Linux系统引导.服务与实验-程序员宅基地

文章浏览阅读776次,点赞18次,收藏20次。systemd unit(单元),systemd方便管理程序,将程序按照特定的功能分成很多单元,服务,单元,写配置。一般来说第一启动项是硬盘,找到硬盘后,会根据mbr的指引 找到完整的grub程序,yum以及rpm安装的软件可以直接使用systemctl去启动关闭,重启,开机自启等功能。加电后biso程序会自检硬件,硬件无故障后,会根据第一启动项去找到内核。移动设备,U盘 移动硬盘 ,光驱。检测硬件是否正常,然后根据biso中的启动项设置,去找内核文件。再根据grub的配置文件找到内核文件的具体位置,

在线黑色响应式全屏滚动主页html源码_黑色响应式全屏滚动主页源码-程序员宅基地

文章浏览阅读742次。html5黑色大气的个人博客全屏滚动个人主页源码。直接上传服务器空间就可使用。_黑色响应式全屏滚动主页源码