介紹:我一直在關注K & R作爲我的指導建議。我遇到了下面的代碼,我一直在試圖找出背景中實際發生了什麼。o/s過程終端如何輸入C代碼?
代碼:
// Program to count lines, words and characters in input
#include <stdio.h>
#define IN 1 // inside a word
#define OUT 0 // outside a word
int main()
{
int c, nl, nw, nc, state;
state = 0;
nl = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc; // increment newchar count
if (c == '\n')
++nl; // increment newline count
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw; // increment newword count
}
}
printf("%d %d %d\n", nl, nw, nc);
}
問題:據我所知,在輸入輸入後,按Ctrl + d(Linux的/基於MAC OS)是需要插入EOF字符其中最後將代碼從while循環中打印出來,但是我無法弄清楚在我輸入輸入時背景中發生了什麼。 輸入是否正在同時處理,只是等待Ctrl + D(EOF字符)打印輸出,或者是在處理完Ctrl + D後處理所有輸入。
在前一種方式中,處理能力應該是平衡的,但後一種方式會一次將整個負載放在處理器上,這就是我想知道它是如何工作的原因。
基本上你的問題是運行系統是如何工作的 –
@IlyaBursov我的問題是,如何這個特殊的代碼將被處理編譯器,而不是操作系統的工作方式 –
編譯器將生成對由操作系統提供的函數的調用,該函數可以通過符號向您發送符號,或者在您決定執行此操作時將內部緩衝區發送給您,所以是的,您的問題是操作系統如何工作 –