[英]What is the difference between read and pread in unix?
unix中的函數read()
和pread()
什么區別?
在他們之間做出選擇時,我應該考慮哪些方面?
我用谷歌搜索他們之間的差異,但沒有結果。
Pread()的工作方式與read()類似,但是從文件中的指定位置讀取而不修改文件指針。
當您需要以固定偏移量重復讀取數據時,可以使用它,例如指向文件中各個記錄的數據庫索引,以保存在seek()調用上。
如果您的數據是連續的,則基本上使用read(),如果您知道,則使用pread() ,或者可以計算讀取的偏移量。
從這個鏈接 ,
pread的原子性使共享文件描述符的進程或線程能夠從特定偏移量的共享文件中讀取,而不使用在單獨的lseek和read系統調用中實現相同結果所必需的鎖定機制。 由於文件指針是共享的,因此需要原子性,並且在另一個進程完成lseek之后但在讀取之前,一個線程可能使用lseek移動指針。
谷歌給了我man pread
。
如果您read()
兩次,則會得到兩個不同的結果,這表明read()
在文件中前進。
如果你pread(
)兩次,你得到相同的結果,這表明pread()
停留在文件中的同一點。
read()從當前文件偏移量開始讀取請求的字節數,而使用pread(),可以指定偏移量。 這在一組函數使用文件指針順序讀取文件而另一組函數同時訪問特定數據的情況下非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.