pread()和pwrite()
这两个函数可以原子性的定位搜索(seek)和执行I/O。
函数原型ssize_t pread(intfd, void *buf, size_tcount, off_toffset);
返回值:成功,返回成功读取数据的字节数;失败,返回-1;
参数:
(1) fd:要读取数据的文件描述符
(2) buf:数据缓存区指针,存放读取出来的数据
(3) count:读取数据的字节数
(4) offset:读取的起始地址的偏移量,读取地址=文件开始+offset。注意,执行后,文件偏移指针不变
函数原型ssize_t pwrite(intfd, const void *buf, size_tcount, off_toffset);
返回值:成功,返回写入到文件中的字节数;失败,返回-1;
参数:
(1) fd:要写入数据的文件描述符
(2) buf:数据缓存区指针,存放要写入文件中的数据
(3) count:写入文件中的数据的字节数
(4) offset:写入起始地址的偏移量,写入地址=文件开始+offset。注意,执行后,文件偏移指针不变
//pwrite.c
#include
#include
#include
#include
#include
#include
int main()
{
int fd;
char buf[10]="qwertyu";
off_t i=5;
if((fd=open("test.txt",O_WRONLY|O_CREAT|O_NONBLOCK,0666))<0)
{
perror("file is not open");
exit(1);
}
if((pwrite(fd,buf,sizeof(buf),i))<0)
{
perror("read fail");
exit(1);
}
return 0;
}
#include
#include
#include
#include
#include
#include
int main()
{
int fd;
char buf[10];
if((fd=open("test.txt",O_RDONLY|O_NONBLOCK,0666))<0)
{
perror("file is not open");
exit(1);
}
if((pread(fd,buf,sizeof(buf),6))<0)
{
perror("read fail");
exit(1);
}
printf("buf=%s\n",buf);
return 0;
}
阅读(2589) | 评论(0) | 转发(0) |