簡體   English   中英

什么是Ubuntu的EOF,以及關於Kernighan和Ritchie的EOF

[英]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;
 }

現在,我的問題是:

  1. 如果我按ctrl + z,程序會停止,但是如果我按ctrl + D,程序也會終止,當我在線閱讀它時,它說ctrl + z是Windows中的EOF,而在Linux中是ctrl + d。 這是否意味着它們在Linux中都是EOF? 如果是這樣,另一個EOF是什么?
  2. 在本書的第一章中有這么復雜的問題可以嗎? 還是我應該只閱讀它,當我繼續閱讀時,這些想法就會被清除?

正在發生兩種不同的情況。

在Windows中鍵入Control-Z或在Linux中鍵入Control-D會觸發文件結束條件,並使getchar()返回值EOF

在Linux中鍵入Control-Z會有一些不同: 掛起程序的執行。 鍵入Control-Z后,如果鍵入jobs命令,它將顯示已暫停的程序。 鍵入fg將使其恢復並繼續接受輸入-直到通過鍵入Control-D發出文件結束條件的信號為止。 這將更容易查看您的程序是否生成了一些輸出。

Control-Z的行為與程序的編寫方式無關。 Control-Z將暫停(幾乎) 任何正在運行的程序,無論該程序是否用C編寫,以及是否在等待輸入。 該行為特定於Linux和其他類似Unix的操作系統。

您可能永遠不會充滿疑問和問題 ; 我當然沒有

  1. Windows中的CTRL + Z和Linux中的CTRL + D EOF值發送到stdin,EOF本身是實現定義的。 在Linux中只有CTRL + D可用。 您可以像printf("%d", EOF);一樣打印它printf("%d", EOF); 查看其數值。

  2. 是的,疑問和思想總是有用的=)

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.

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