文件io之——read/write
read函数从打开的设备或文件中读取数据。
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0
读常规文件时,在读到count个字节之前已到达文件末尾。例如,距文件末尾还有30个
字节而请求读100个字节,则read返回30,下次read将返回0。
从终端设备读,通常以行为单位,读到换行符就返回了。
从网络读,根据不同的传输层协议和内核缓存机制,返回值可能小于请求的字节数,后
面socket编程部分会详细讲解。
write函数向打开的设备或文件中写数据。
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
返回值:成功返回写入的字节数,出错返回-1并设置errno
写常规文件时,write的返回值通常等于请求写的字节数count,而向终端设备或网络写
则不一定。
把main.c的内容全部拷贝到main.c.copy中:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include<unistd.h> #include<string.h> int main(void) { int len; char buf[1024]; umask(0); int fd1=open("main.c",O_RDWR); int fd2=open("main.c.copy",O_CREAT|O_WRONLY|O_TRUNC,0644); while((len= read(fd1,buf,sizeof(buf)))>0) { write(fd2,buf,len); } close(fd1); close(fd2); return 0; }
read:是把文件内容读到缓冲区
write:是把缓冲区内容写到文件
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
![](https://images.cnblogs.com/cnblogs_com/yangguang-it/1907263/o_201227061707QQ20201227141844.png)
![](https://images.cnblogs.com/cnblogs_com/yangguang-it/1704156/o_200415115115qrcode_for_gh_5c7d1da35871_258.jpg)
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |