当涉及文件 I/O 时,read 和 write 函数是非常关键的。它们允许从文件中读取数据或将数据写入文件。以下是更详细的解释和示例:
1.ssize_t read(int fd, void *buf, size_t count);
fd是文件描述符,表示要从中读取数据的文件。buf是一个指向存储读取数据的内存缓冲区的指针。count是要读取的字节数。
返回值:
- 如果成功读取数据,
read返回实际读取的字节数(非负整数)。 - 如果已经到达文件的末尾(EOF),
read返回 0。 - 如果发生错误,
read返回 -1,并设置全局变量errno以指示错误类型。
2. ssize_t write(int fd, const void *buf, size_t count);
fd是文件描述符,表示要写入数据的文件。buf是一个指向包含要写入的数据的内存缓冲区的指针。count是要写入的字节数。
返回值:
- 如果成功写入数据,
write返回实际写入的字节数。 - 如果发生错误,
write返回 -1,并设置全局变量errno以指示错误类型。
/*
#include <unistd.h>
1. ssize_t read(int fd, void *buf, size_t count);
参数:
-fd : 文件描述符,open得到的,通过文件描述符操作某个文件
-buf : 需要读取数据存取的地方,数组的地址(传出参数)
-count :指定数组的大小
返回值:
-成功:
>0 : 返回实际读取到的字节数
=0 :文件已经读取完了
-失败:
-1 :并且设置errno
2. ssize_t write(int fd, const void *buf, size_t count);
参数:
-fd : 文件描述符,open得到的,通过文件描述符操作某个文件
-buf : 要向磁盘写入数据,数组
-count : 要写的数据的实际大小
返回值:
成功:
实际写入的字节数
失败:
返回-1 :并且设置errno
*
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int test1(){
//1 .
int srcfd = open("F:\\C++\\C++\\c++linux\\linux_io_fun\\examples.txt",O_RDONLY);
if(srcfd==-1){
perror("open");
return -1;
}
//2.
int destfd = open("F:\\C++\\C++\\c++linux\\linux_io_fun\\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(destfd);
close(srcfd);
}
int main(){
test1();
return 0;
}
本文详细解释了在Linux中read和write函数在文件I/O操作中的作用,包括参数、返回值和错误处理,以及一个使用这两个函数进行文件复制的示例。
1529

被折叠的 条评论
为什么被折叠?



