[英]What are the advantages of pwrite and pread over fwrite and fread?
嘿,請不要介意我是否在問一些微不足道的問題,但是,請有人幫我這個..
有兩個部分:
pread
/ pwrite
和read
/ write
之間的pread
:
它們都處於同一級別,即系統調用。 有兩點不同:
read
/ pread
/ write
/ pwrite
和fread
/ fwrite
之間的區別:
“f”變體是前者的標准運行時包裝器(使用基本變體)。 它們支持進程內緩沖。 這可以顯着提高簡單代碼的性能,但它使用系統調用級別的其他功能是不切實際的。
如果您可以很好地使用隨機偏移量讀取(避免搜索並允許通過一個文件句柄進行並發訪問),則只使用“p”變體,這通常是某種數據庫文件的情況(以已知偏移的記錄為記錄)很少在其他應用程序中。
當您進行大量隨機讀/寫操作時,它很有用。 SQLite3甚至可以選擇用pread()/pwrite()
替換seek()
+ read()
和seek()
+ write()
pread()/pwrite()
。
優點: seek()
+ read()
和seek()
+ write()
都是系統調用對,而pread()
和pwrite()
是單系統調用。 這通常是一個普遍的事實,即較少的系統調用程序問題就越有效。
調用pread
/ pwrite
后,當前文件位置不會改變。
另外,因為您不需要調用lseek
來更改當前文件位置pread
/ pwrite
避免涉及多個線程時的潛在競爭條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.