簡體   English   中英

如何阻止讀取系統調用

[英]How to block the read system call

我不明白read()系統是如何阻塞的。 我創建了一個空文件並嘗試使用read()系統調用進行讀取。 它返回0。

fd = open("Demo.txt",O_RDONLY);
n = read(fd,&ch,10); // returns 0 

我期待read()無限期地阻止,因為文件中沒有數據。 read()會將EOF視為有效數據並立即返回嗎? 我的理解是否正確?

是的,EOF會導致read()立即返回,而不是阻塞。 當你到達EOF時,read()不會等待更多的數據寫入文件; 它立即返回0個字節。 除了磁盤上的數據被讀入內存時通常難以察覺的延遲之外,從磁盤上讀取文件時阻塞不起作用。

使用TTY,套接字和管道時更相關。 例如,當stdin連接到終端時從stdin讀取將阻塞,直到用戶鍵入內容為止。 如果我們沒有從另一方接收數據,則從套接字讀取將阻止。 從管道讀取將阻塞,直到管道另一側的程序寫入內容。

你的理解是正確的。 read()僅在從已連接的管道或網絡套接字讀取時阻止。

這里

read()嘗試從buf開始讀取從文件描述符fd到緩沖區的字節數。

在常規文件上沒有read塊,如果常規文件為空,則返回0(如您所見)預期意味着從文件中讀取0個字節..文件類型(例如FIFO /管道)支持阻止行為。

暫無
暫無

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

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