看板 C_and_CPP 關於我們 聯絡資訊
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裏面? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.33.176 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1575532214.A.75D.html
Schottky: 問題是你說的 buffer 是什麼 buffer XDDDD 12/05 16:14
Schottky: getchar() 是 stdio function, stdio 預設對於 termianl 12/05 16:17
Schottky: 是 line buffered,而這個 buffer 不是你說的那個buffer 12/05 16:17
Schottky: 改用 read() 只讀一個 char 應該就是你要的效果了 12/05 16:19
anoymouse: stdin有幾個buffer? 整個過程不是一個line buffer? 12/05 16:33
Schottky: 你以為 getchar() 只吃一個字,其實他吃了一整行 12/05 22:57
anoymouse: 我看網上是說一個字元耶 該怎麼理解所謂一整行? 12/06 08:04
LPH66: getchar() 是從 line buffer 裡取出一個字元 12/06 08:29
LPH66: 而 line buffer 在有人向它要東西時已經從終端吃一行進來了 12/06 08:30
LPH66: 這個終端才是你所提的 stdin 內容 12/06 08:31
anoymouse: 釐清一下line buffer是kernel buffer? 12/06 19:56