[英]What is/are the EOF in ubuntu and also about Kernighan and Ritchie
我已經開始學習C,也已經開始使用Ubuntu。 我正在通過終端在vim中編寫代碼。 我一直在Kernighan和Ritchie學習。 這是代碼-
#include <stdio.h>
int main()
{
int c;
while ( (c = getchar()) != EOF)
putchar(c);
return 0;
}
現在,我的問題是:
正在發生兩種不同的情況。
在Windows中鍵入Control-Z或在Linux中鍵入Control-D會觸發文件結束條件,並使getchar()
返回值EOF
。
在Linux中鍵入Control-Z會有一些不同: 掛起程序的執行。 鍵入Control-Z后,如果鍵入jobs
命令,它將顯示已暫停的程序。 鍵入fg
將使其恢復並繼續接受輸入-直到通過鍵入Control-D發出文件結束條件的信號為止。 這將更容易查看您的程序是否生成了一些輸出。
Control-Z的行為與程序的編寫方式無關。 Control-Z將暫停(幾乎) 任何正在運行的程序,無論該程序是否用C編寫,以及是否在等待輸入。 該行為特定於Linux和其他類似Unix的操作系統。
您可能永遠不會充滿疑問和問題 ; 我當然沒有
Windows中的CTRL + Z和Linux中的CTRL + D 將 EOF值發送到stdin,EOF本身是實現定義的。 在Linux中只有CTRL + D可用。 您可以像printf("%d", EOF);
一樣打印它printf("%d", EOF);
查看其數值。
是的,疑問和思想總是有用的=)
C中的EOF是一個條件(“文件末尾”),不是一個特殊字符,告訴您已到達末尾-沒有更多輸入。此條件由各種函數(例如getchar())指示給您,該函數返回特殊值EOF。EOF只是一個值(通常是#定義為-1的宏),否則將不會出現在這些函數讀取的數據中。
如果您是從文件或管道讀取的,則知道當getchar()返回EOF時,您已經到達該文件的末尾。 getchar()從標准輸入讀取。 通過將程序作為echo hello | ./theprogram
運行,可以將管道連接到stdin而不是控制台echo hello | ./theprogram
echo hello | ./theprogram
如果您從終端/控制台讀取輸入,則情況會更加復雜。 在某些系統上,將鍵盤輸入帶入程序需要涉及很多層 。
但是簡短的版本是,在某些系統上,當您按下CTRL + D(或者在其他系統上是CTRL + Z)組合鍵時,它可以通知您的程序輸入已到達末尾,這使getchar()返回EOF。
對於Linux上的CTRL + z,這將掛起(暫停,但不終止)當前前台進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.