[問題] stdin問題請益

作者: anoymouse (沒有暱稱)   2019-12-05 15:50:11
Linux
GCC
http://man7.org/tlpi/code/online/dist/altio/t_select.c.html
因為程式沒有任何讀取的動作,所以stdin buffer裡面的資料會導到shell上。
https://imgur.com/Mua5xCJ
比如只按enter 命令提示就會再跳一個$
如果是ls + enter, ls 就會導到shell,然後變成shell command。
在程式exit(EXIT_SUCCESS)前放一個getchar(),單一字元就不會導到shell。
但是如果是輸入ls再加enter,為什麼s + 換行符並沒有導到shell上?
getchar 不是只吃一個字元而已嗎,剩下的還再buffer裏面?
謝謝
作者: Schottky (順風相送)   2019-12-05 16:14:00
問題是你說的 buffer 是什麼 buffer XDDDDgetchar() 是 stdio function, stdio 預設對於 termianl是 line buffered,而這個 buffer 不是你說的那個buffer改用 read() 只讀一個 char 應該就是你要的效果了
作者: anoymouse (沒有暱稱)   2019-12-05 16:33:00
stdin有幾個buffer? 整個過程不是一個line buffer?
作者: Schottky (順風相送)   2019-12-05 22:57:00
你以為 getchar() 只吃一個字,其實他吃了一整行
作者: anoymouse (沒有暱稱)   2019-12-06 08:04:00
我看網上是說一個字元耶 該怎麼理解所謂一整行?
作者: LPH66 (-6.2598534e+18f)   2019-12-06 08:29:00
getchar() 是從 line buffer 裡取出一個字元而 line buffer 在有人向它要東西時已經從終端吃一行進來了這個終端才是你所提的 stdin 內容
作者: anoymouse (沒有暱稱)   2019-12-06 19:56:00
釐清一下line buffer是kernel buffer?

Links booklink

Contact Us: admin [ a t ] ucptt.com