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:是把缓冲区内容写到文件