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函数
#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 read(int fd, void *buf, size_t count);
- 参数:
- fd:文件描述符,open得到,通过文件描述符操作某个文件
- buf:要往磁盘写入的数据
- count:要写的数据的实际的大小
- 返回值:
- 成功:返回实际写入的字节数
- 失败:返回-1,并设置合适的errno
1.3 实现文件拷贝
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
// 要被复制的文件的打开
int txt_fd1 = open("笔记1.txt", O_RDONLY);
if (txt_fd1 == -1) {
printf("open txt1 file failed!\n");
}else {
printf("open txt1 file success!\n");
}
// 复制的文件打开
int txt_fd2 = open("笔记2.txt", O_WRONLY);
if (txt_fd2 == -1) {
printf("open txt2 file failed!\n");
}else {
printf("open txt2 file success!\n");
}
int rt;
char buf[4096];
while (1) {
/*
rt = read(txt1_fd, buf, 4096);
if (rt > 0) {
rt = write(txt2_fd, buf, rt);
}else {
break;
}
*/
rt = read(txt1_fd, buf, 4096);
if (rt <= 0) {
break;
}
rt = write(txt2_fd, buf, rt);
}
close(txt1_fd);
close(txt2_fd);
return 0;
}