接口:在<unistd.h>里
extern ssize_t write (int __fd, const void *__buf, size_t __n);
extern ssize_t read (int __fd, void *__buf, size_t __nbytes);
一、write()
1.参数一为被写入的文件对应的文件描述符,第二个参数为缓存区,第三个参数为写入的字节数
2.功能:将buf里的数据写入fd对应的文件,以n为写入单位
3.返回值:返回写入的字节数,-1表示写入失败
二、read()
1.参数一为被读取的文件对应的文件描述符,第二个参数为缓存区,第三个参数为读取的字节数
2.功能:读取fd对应的文件,并将读取的数据保存到buf,以nbytes为读取单位
3.返回值:返回读取的字节数,-1表示读取失败,0表示读取结束
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
int main(void)
{
//只读模式打开文件
int fd1 = open("test.txt",O_RDONLY);
if(fd1 == -1){
perror("open test.txt");
exit(1);
}
else
printf("fd1 = %d\n",fd1);
//创建文件,并在该程序中以写模式打开
int fd2 = open("newtest.txt", O_CREAT | O_WRONLY, 0664);
if(fd2 == -1){
perror("open newtest.txt");
exit(1);
}
else
printf("fd2 = %d\n",fd2);
char buf[1024] = {0};
int r_count = read(fd1, buf, sizeof(buf)); //读取fd1代表的文件,以sizeof(buf)为读取单位,将读取的数据保存到buf
if(r_count == -1){ //读取失败
perror("read fd1");
exit(1);
}
else
printf("read bytes = %d\n",r_count); //读取成功返回读取的字节数
int w_count = 0;
while(r_count != 0){ //为0表示读到文件结尾,读取结束
w_count = write(fd2, buf, r_count); //将buf里的数据写入到fd2代表的文件中,以r_count为一次写入单位(读取多少就写入多少)
printf("write bytes %d\n",w_count); //写入成功返回写入的字节数
r_count = read(fd1, buf, sizeof(buf));
printf("read bytes = %d\n",r_count);
}
close(fd1);
close(fd2);
return 0;
}
测试结果:
fd1 = 3
fd2 = 4
read bytes = 1024
write bytes 1024
read bytes = 1024
write bytes 1024
read bytes = 1024
write bytes 1024
read bytes = 367
write bytes 367
read bytes = 0
-rw-rw-r-- 1 zhangqu zhangqu 3439 5月 8 21:55 newtest.txt
-rw-rw-r-x 1 zhangqu zhangqu 3439 5月 8 21:08 test.txt