Unix/Linux中的read和write函数
作者:网络转载 发布时间:[ 2016/12/19 10:22:39 ] 推荐标签:Linux 操作系统
1、文件描述符
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。
2、write函数
write函数定义如下:
#include < unistd >
ssize_t write(int filedes, void *buf, size_t nbytes);
// 返回:若成功则返回写入的字节数,若出错则返回-1
// filedes:文件描述符
// buf:待写入数据缓存区
// nbytes:要写入的字节数
write函数简单示例代码:
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
int main()
{
int fd = open("./write.txt", O_WRONLY | O_CREAT, 0666);
if (-1 == fd){
perror("open file error");
return;
}
char* buff = "write data to file!";
ssize_t writelen = write(fd, buff, strlen(buff));
printf("%d
", writelen);
close(fd);
return 0;
}
3、read函数
read函数定义如下:
#include < unistd >
ssize_t read(int filedes, void *buf, size_t nbytes);
// 返回:若成功则返回读到的字节数,若已到文件末尾则返回0,若出错则返回-1
// filedes:文件描述符
// buf:读取数据缓存区
// nbytes:要读取的字节数
有几种情况可使实际读到的字节数少于要求读的字节数:
1)读普通文件时,在读到要求字节数之前已经达到了文件末端。例如,若在到达文件末端之前还有30个字节,而要求读100个字节,则read返回30,下一次再调用read时,它将返回0(文件末端)。
2)当从终端设备读时,通常一次多读一行。
3)当从网络读时,网络中的缓存机构可能造成返回值小于所要求读的字结束。
4)当从管道或FIFO读时,如若管道包含的字节少于所需的数量,那么read将只返回实际可用的字节数。
5)当从某些面向记录的设备(例如磁带)读时,一次多返回一个记录。
6)当某一个信号造成中断,而已经读取了部分数据。
read函数简单示例代码:
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
int main()
{
int fd = open("./read.txt", O_RDONLY | O_CREAT, 0666);
if (-1 == fd){
perror("open file error");
return;
}
char buff[1024];
memset(buff, 0, sizeof(buff));
ssize_t readlen = read(fd, buff, 1024);
printf("%s", buff);
printf("%d
", readlen);
close(fd);
return 0;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11