Linux系统IO函数readwrite函数及实现文件拷贝
Posted 傅耳耳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统IO函数readwrite函数及实现文件拷贝相关的知识,希望对你有一定的参考价值。
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 3月 24 10:31 ./
drwxrwxr-x 11 fuerer fuerer 4096 3月 24 10:02 ../
-rwxrwxr-x 1 fuerer fuerer 8528 3月 24 10:31 copy*
-rw-rw-r-- 1 fuerer fuerer 1792 3月 24 10:31 copyfile.c
-rw-rw-r-- 1 fuerer fuerer 129772 3月 24 10:31 cpy.txt
-rw-rw-r-- 1 fuerer fuerer 129772 3月 24 10:21 english.txt
cpy.txt与english.txt大小均为 129772 个字节
以上是关于Linux系统IO函数readwrite函数及实现文件拷贝的主要内容,如果未能解决你的问题,请参考以下文章