windows和linux下的讀取中止,eof

EOF:end of file  標誌文件的結尾。



關於EOF和ctrl+z,ctrl+c以及Linux,Windows下的關係:

#include<stdio.h>

main(){
        int c;
        c=getchar();
        while(c!=EOF){
                putchar(c);
                c=getchar();
        }
        if(c==EOF){
                printf("WOW\n");
        }
}


在Linux下,我按下ctrl+D,能顯示WOW,說明ctrl+D是代表EOF;
Linux的數據檢查使用非阻塞式檢查(ctrl+D)
非阻塞式檢查指:當在輸入一串字符時,當按下ctrl+D,立即響應,把ctrl+D以及之前所輸入的全部放入緩衝區供使用,ctrl+D相當於回車作用,而不是終止作用;當ctrl+D單獨使用,那麼相當於EOF;

解釋程序:在第一個sdsdd後,我輸入ctrl+D,程序緊接着輸出sdsdd;
在最後,我直接輸入ctrl+D,然後輸出WOW;

Linux下的ctrl+z表示掛起進程。
Linux下的ctrl+c表示中斷進程。
它們對進程的狀態的影響是不同的。在ps -aux可查看狀態,ctrl+z使stat的值爲t,ctrl+c使stat的值爲i。


在windows下,我單獨按下ctrl+z,能顯示WOW;
Windows的阻塞式檢查:只有回車鍵按下之後,纔對ctrl+z進行檢查;如果ctrl+z前面有輸入,那麼和Linux一樣,相當於回車作用,將ctrl+z及其之前的內容推入緩衝區;單獨使用,相當於EOF;


解釋程序:在第一個輸入中,在ctrl+Z後還輸入了其他內容,但是在輸出中只顯示了abcd(還有ctrl+z的亂碼),在單獨使用ctrl+Z,輸出了WOW;

在windows下,ctrl+D就是一個普通字符。
在windows下,ctrl+C強行終止程序(閃退),然後輸出WOW(即使在前面有輸入的情況下)

 

關於EOF的實際值,在stdio.h中定義,一般爲-1,但是程序員可以不用瞭解其具體值,但是一定要求,EOF的值不能在char型變量的取值範圍之內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章