[問題] stdin問題請益

看板C_and_CPP作者 (沒有暱稱)時間4年前 (2019/12/05 15:50), 編輯推噓3(308)
留言11則, 3人參與, 4年前最新討論串1/1
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

12/05 16:14, 4年前 , 1F
問題是你說的 buffer 是什麼 buffer XDDDD
12/05 16:14, 1F

12/05 16:17, 4年前 , 2F
getchar() 是 stdio function, stdio 預設對於 termianl
12/05 16:17, 2F

12/05 16:17, 4年前 , 3F
是 line buffered,而這個 buffer 不是你說的那個buffer
12/05 16:17, 3F

12/05 16:19, 4年前 , 4F
改用 read() 只讀一個 char 應該就是你要的效果了
12/05 16:19, 4F

12/05 16:33, 4年前 , 5F
stdin有幾個buffer? 整個過程不是一個line buffer?
12/05 16:33, 5F

12/05 22:57, 4年前 , 6F
你以為 getchar() 只吃一個字,其實他吃了一整行
12/05 22:57, 6F

12/06 08:04, 4年前 , 7F
我看網上是說一個字元耶 該怎麼理解所謂一整行?
12/06 08:04, 7F

12/06 08:29, 4年前 , 8F
getchar() 是從 line buffer 裡取出一個字元
12/06 08:29, 8F

12/06 08:30, 4年前 , 9F
而 line buffer 在有人向它要東西時已經從終端吃一行進來了
12/06 08:30, 9F

12/06 08:31, 4年前 , 10F
這個終端才是你所提的 stdin 內容
12/06 08:31, 10F

12/06 19:56, 4年前 , 11F
釐清一下line buffer是kernel buffer?
12/06 19:56, 11F
文章代碼(AID): #1TwBQsTT (C_and_CPP)