首页 / 操作系统 / Linux / Linux系统编程之文件与IO:系统调用read和write
- read系统调用
一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节函数原型:#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);参数fd :想要读的文件的文件描述符buf : 指向内存块的指针,从文件中读取来的字节放到这个内存块中count : 从该文件复制到buf中的字节个数返回值如果出现错误,返回-1读文件结束,返回0否则返回从该文件复制到规定的缓冲区中的字节数否则返回从该文件复制到规定的缓冲区中的字节数
- write系统调用
用write()系统调用将数据写到一个文件中函数原型:#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);函数参数:-fd:要写入的文件的文件描述符-buf:指向内存块的指针,从这个内存块中读取数据写入 到文件中-count:要写入文件的字节个数返回值如果出现错误,返回-1注:write并非真正写入磁盘,而是先写入内存缓冲区,待缓冲区满或进行刷新操作后才真正写入磁盘,若想实时写入磁盘可调用int fsync(int fd);或在open时flags加上O_SYNC
- 利用read和write进行文件拷贝程序代码:
- #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#define EXIT_ERR(m) do{perror(m);exit(EXIT_FAILURE);}while(0)int main(int argc, char **argv){int infd;int outfd;if(argc != 3){fprintf(stderr,"usage:%s src des
",argv[0]);exit(EXIT_FAILURE);}if((infd = open(argv[1],O_RDONLY)) == -1)EXIT_ERR("open error");if((outfd = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644)) == -1)EXIT_ERR("OPEN ERROR");char buf[1024];int n;while((n = read(infd, buf, 1024)) > 0 ){write(outfd, buf, n);}close(infd);close(outfd);return 0;}
测试结果: