说明
- 对文件进行偏移读写,传统方式使用seek或lseek设置文件偏移再进行读写操作,在linux平台上可以使用pread/pwrite函数。
- pread和pwrite函数是Linux提供的另外一种读取和写入文件的操作,pread函数的操作可以看作是顺序调用了lseek函数和read函数,同样pwrite函数也类似。
- 详细说明可以通过man查看。
对比传统方式
- pread和pwrite是线程安全的,而传统方式不是。
- 功能一样,但是系统调用更少,性能更高。
- pread和pwrite是原子操作,而传统方式不是。
- pread和pwrite不会更改文件的偏移量,而传统方式会。
函数说明
#include <unistd.h>
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
fd:要操作的文件描述符
buf:在pread函数中表示存储读出数据的内存首地址,在pwrite函数中表示写入数据的内存首地址
count:在pread函数中表示希望读出的字节数,在pwrite函数中表示希望写入的字节数
offset:表示从哪个位置开始读取或者写入数据。偏移量是从文件开头开始计算
调用成功时pread函数返回实际读到的字节数,遇到文件结尾则返回0;pwrite返回写入的字节数
调用失败时pread函数返回 -1 ;pwrite函数返回 -1 .