簡體   English   中英

如果我多次調用C的read()會發生什么?

[英]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 每次您調用readwrite ,都會在該偏移量處執行操作,此后偏移量將遞增。 您可能可以使用lseek()手動重新定位偏移量,具體取決於fd引用的文件類型。

還有一對函數pread()pwrite()不會修改此偏移量,而是必須將偏移量顯式傳遞給該函數。 請注意,關於Linux上的O_APPENDpwrite()已損壞。

有關更多詳細信息,請閱讀IEEE 1003.1,2013版(POSIX.1 2008)關於read()的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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