PREAD - Linux手册页

时间:2019-08-20 17:59:10  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

pread,pwrite-以给定的偏移量读取或写入文件描述符

语法

#包括

ssize_t pread(int fd,void * buf,size_t count,off_t偏移量);

ssize_t pwrite(int fd,const void * buf,size_t count,off_t偏移量);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

pread(),pwrite():

_XOPEN_SOURCE>= 500 || / *自glibc 2.12起:* / _POSIX_C_SOURCE>= 200809L

说明

pread()从文件描述符fd中以偏移量offset(从文件的开头)最多读取字节数,从buf开始将其计数到缓冲区中。文件偏移量未更改。

pwrite()写入从缓冲区buf到偏移量offset的文件描述符fd的计数字节。文件偏移量未更改。

fd引用的文件必须能够搜索。

返回值

成功后,pread()返回读取的字节数(返回零表示文件结束),而pwrite()返回写入的字节数。

请注意,成功调用传输的字节数少于请求的字节数不是错误(请参见read(2)和write(2))。

发生错误时,将返回-1并将errno设置为指示错误原因。

错误说明

pread()可能会失败,并将errno设置为read(2)或lseek(2)指定的任何错误。 pwrite()可能会失败,并将errno设置为write(2)或lseek(2)指定的任何错误。

版本

pread()和pwrite()系统调用已在2.1.60版中添加到Linux; i386系统调用表中的条目已在2.1.69中添加。在glibc 2.1中添加了C库支持(包括在较早的内核上使用lseek(2)进行仿真而不进行系统调用)。

遵循规范

POSIX.1-2001,POSIX.1-2008。

备注

pread()和pwrite()系统调用在多线程应用程序中特别有用。它们允许多个线程在同一个文件描述符上执行I / O,而不受其他线程对文件偏移量的更改影响。

C library/kernel differences

在Linux上,底层系统调用在内核2.6中被重命名:pread()变为pread64(),而pwrite()变为pwrite64()。系统呼叫号码保持不变。 glibc pread()和pwrite()包装函数透明地处理更改。

在某些32位体系结构上,由于syscall(2)中所述的原因,这些系统调用的调用签名不同。

BUGS

POSIX要求使用O_APPEND标志打开文件应该对pwrite()写入数据的位置没有影响。但是,在Linux上,如果使用O_APPEND打开文件,则pwrite()会将数据追加到文件末尾,而不管offset的值如何。

另外参见

lseek(2),read(2),readv(2),write(2)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/