首頁  >  文章  >  後端開發  >  當標準輸入流 (stdin) 處於交互模式時,如何模擬檔案結束 (EOF) 訊號?

當標準輸入流 (stdin) 處於交互模式時,如何模擬檔案結束 (EOF) 訊號?

Susan Sarandon
Susan Sarandon原創
2024-10-30 02:48:29731瀏覽

How can you simulate an End of File (EOF) signal in the Standard Input stream (stdin) when it's in interactive mode?

標準輸入流(stdin)的檔案結束符(EOF)

使用stdin 作為程式的輸入來源時,很自然想知道它是否支援文件結束(EOF)指示。標準輸入的性質取決於其配置方式。

帶有來自檔案的輸入的 stdin

當 stdin 從檔案重定向時,它本質上有一個 EOF標記,類似於常規檔案流。這是因為檔案有一個定義的端點,當讀取操作到達檔案末端時,就會遇到 EOF 條件。

來自控制台的 stdin

但是、來自控制台的 stdin 輸入(稱為交互模式)本質上沒有 EOF 指示器。這是因為控制台輸入通常是使用者鍵入的連續字元流。

在控制台模式下模擬EOF

要在控制台模式下模擬EOF,平台-可以使用特定的組合鍵:

  • 基於Unix 的系統:Ctrl D
  • Windows 系統:Ctrl Z

按下這些組合鍵後,程式將其視為輸入已到達末端。

手動將 EOF 加到 stdin

如前所述,來自控制台的 stdin 被視為無限流。若要手動新增 EOF,使用者必須使用 Ctrl D 或 Ctrl Z 組合鍵明確指示它。

使用fread 或read 函數的解決方案

在提供的程式碼中使用fread 或read 進行取樣,循環將無限期地繼續下去,直到遇到EOF 。若要在此場景中手動新增EOF 條件,請使用以下方法:

<br>int c;<br>while ((c = read(0, buffer, BUFSIZ)) > 0) {<pre class="brush:php;toolbar:false">// Read and process data from stdin

}

//當按下Ctrl D或Ctrl Z時,c將為-1,表示EOF
if (c == -1) {

// Handle EOF condition

}

這樣,循環可以在使用者按下EOF 組合時終止,從而允許程式相應地處理輸入的結束。

以上是當標準輸入流 (stdin) 處於交互模式時,如何模擬檔案結束 (EOF) 訊號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn