簡體   English   中英

pwrite和pread相比fwrite和fread有什么優勢?

[英]What are the advantages of pwrite and pread over fwrite and fread?

嘿,請不要介意我是否在問一些微不足道的問題,但是,請有人幫我這個..

有兩個部分:

  1. pread / pwriteread / write之間的pread

    它們都處於同一級別,即系統調用。 有兩點不同:

    1. “p”變體采用偏移量來讀取,因此它們獨立於當前文件指針。 這使得同時從多個線程讀取/寫入更容易。
    2. “p”變體僅適用於可搜索文件(即真實文件,而不是管道,套接字或設備)。
  2. read / pread / write / pwritefread / 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM