文件I/O操作函数 read() write()

read()

函数说明read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 
头文件#include <unistd.h>
函数原型ssize_t read(int fd, void * buf, size_t count);
参数fd:打开的文件描述符
 buf:指定存储器读出数据的缓冲区
 count:指定读出的字节数
返回值成功:读到的字节数
 0:已到文件尾
 

-1:出错 设置errno,文件读写位置则无法预期.

错误代码:
EINTR 此调用被信号所中断.
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK), 若无数据可读取则返回此值.
EBADF 参数fd 非有效的文件描述词, 或该文件已关闭.

备注

 如果顺利 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()错误代码:
EINTR 此调用被信号所中断.
EAGAIN 当使用不可阻断I/O 时 (O_NONBLOCK), 若无数据可读取则返回此值.
EADF 参数fd 非有效的文件描述词, 或该文件已关闭.

 备注 返回值如果小于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; }

 

转载于:https://www.cnblogs.com/CloudPing/p/3802455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值