read()
函数说明 | read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. |
头文件 | #include <unistd.h> |
函数原型 | ssize_t read(int fd, void * buf, size_t count); |
参数 | fd:打开的文件描述符 |
buf:指定存储器读出数据的缓冲区 | |
count:指定读出的字节数 | |
返回值 | 成功:读到的字节数 |
0:已到文件尾 | |
-1:出错 设置errno,文件读写位置则无法预期. 错误代码: | |
备注 | 如果顺利 read()会返回实际读到的字节数, 最好能将返回值与参数count 作比较, 若返回的字节数比要求读取的字节数少, 则有可能读到了文件尾、从管道(pipe)被信号中断了读取动作. |
write()
函数说明 | 把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内. 当然, 文件读写位置也会随之移动. |
头文件 | #include <unistd.h> |
函数原型 | ssize_t write (int fd, const void * buf, size_t count); |
参数 | fd:打开的文件描述符 |
buf:指定存储器写入数据的缓冲区 | |
count:指定写入的字节数 | |
返回值 | 成功:已写的字节数 |
-1:出错 错误代码存入errno 中 write()错误代码: | |
备注 | 返回值如果小于strlen(buf),需要循环将全部待写数据写入文件 |
例:
/*利用文件IO函数实现文件的拷贝的功能*/
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #define N 64 int main(int argc, char *argv[]) { int fds, fdt, nbyte; char buf[N]; if (argc < 3) { printf("Usage : %s <src_file> <dst_file>\n", argv[0]);//提示输入格式 判断参数个数 return -1; } if ((fds = open(argv[1], O_RDONLY)) < 0)//以只读方式打开源文件 { perror("fail to open"); return -1; } if ((fdt = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)//创建新的目标文件等待写入 { perror("fail to open"); return -1; } while ((nbyte = read(fds, buf, N)) > 0)//循环读出源文件到buf { write(fdt, buf, nbyte);//循环从buf写入到目标文件 } close(fds);//关闭源文件 close(fdt);//关闭目标文件 return 0; }