read()和pread()在unix中有什么区别?在两者之间选择时,我应该考虑哪些要点?我在谷歌上搜索它们之间的区别,但没有结果。
read()
pread()
pbpqsu0x1#
当需要以固定偏移量重复读取数据(例如,指向文件中单个记录的数据库索引)时,可以使用它来保存 seek() 调用。基本上,如果您的数据是连续的,则使用 read(),如果您知道,则使用 pread(),或者可以计算读取的偏移量。
gzszwxb42#
From this pread link,pread的原子性使共享文件描述符的进程或线程能够在特定偏移量处从共享文件读取,而无需使用锁定机制,而锁定机制对于在单独的lseek和read系统调用中实现相同的结果是必需的。原子性是必需的,因为文件指针是共享的,并且一个线程可能在另一个进程完成lseek之后但在读取之前使用lseek移动指针。
pread
7vhp5slm3#
谷歌给了我man pread。如果您read()两次,您会得到两个不同的结果,这表明read()在文件中前进。如果两次执行pread(),则会得到相同的结果,即pread()停留在文件中的同一点。
man pread
pread(
ftf50wuq4#
read()从当前文件偏移量开始阅读所请求的字节数,而使用pread(),您可以指定偏移量。这在一组函数使用文件指针顺序读取文件,而另一组函数同时访问特定数据的情况下非常有用。
4条答案
按热度按时间pbpqsu0x1#
当需要以固定偏移量重复读取数据(例如,指向文件中单个记录的数据库索引)时,可以使用它来保存 seek() 调用。
基本上,如果您的数据是连续的,则使用 read(),如果您知道,则使用 pread(),或者可以计算读取的偏移量。
gzszwxb42#
From this
pread
link,pread的原子性使共享文件描述符的进程或线程能够在特定偏移量处从共享文件读取,而无需使用锁定机制,而锁定机制对于在单独的lseek和read系统调用中实现相同的结果是必需的。原子性是必需的,因为文件指针是共享的,并且一个线程可能在另一个进程完成lseek之后但在读取之前使用lseek移动指针。
7vhp5slm3#
谷歌给了我
man pread
。如果您
read()
两次,您会得到两个不同的结果,这表明read()
在文件中前进。如果两次执行
pread(
),则会得到相同的结果,即pread()
停留在文件中的同一点。ftf50wuq4#
read()从当前文件偏移量开始阅读所请求的字节数,而使用pread(),您可以指定偏移量。这在一组函数使用文件指针顺序读取文件,而另一组函数同时访问特定数据的情况下非常有用。