[英]What happens if I call C's read() multiple times?
文檔對此非常含糊。 如果我多次調用C的read()
函數,則必須傳遞希望每次讀取的多個字節。 但是我怎么知道起始索引是多少? 例如:
n = read(fd, *buffer, 10) n2 = read(fd, *buffer, 10)
第一次調用read
將讀取文件描述符為fd
的文件的10個字節到buffer
。 但是,當我再次調用它時,它將讀取完全相同的東西,還是讀取接下來的 10個字節? 我真的認為這沒有道理,但是我看不到其他方法來定義所需的起始索引。
操作系統會跟蹤文件中的“當前位置”。 當您打開文件時,這將是文件的開始。 每次調用read
,都會從當前位置讀取一些字節,並且還會向前移動當前位置。 您可以使用lseek
更改當前位置。
請注意, read
也可用於沒有當前位置的東西,例如管道和插座。 由於從其中讀取將始終返回您尚未讀取的下一個數據,因此這使它們與文件的工作方式保持一致(但您不能使用lseek
)。
read(fd, buf, len)
函數將把存儲在fd
所引用的文件描述中的偏移量增加len
。 每次您調用read
或write
,都會在該偏移量處執行操作,此后偏移量將遞增。 您可能可以使用lseek()
手動重新定位偏移量,具體取決於fd
引用的文件類型。
還有一對函數pread()
和pwrite()
不會修改此偏移量,而是必須將偏移量顯式傳遞給該函數。 請注意,關於Linux上的O_APPEND
, pwrite()
已損壞。
有關更多詳細信息,請閱讀IEEE 1003.1,2013版(POSIX.1 2008)關於read()的內容 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.