看板 LinuxDev 關於我們 聯絡資訊
http://man7.org/tlpi/code/online/book/altio/t_select.c.html 功能: 用select() 觀察fd 0 是否ready。 然後一定要按enter , fd 0 才會ready。 Beej's Guide to Network Programming 7.2. select():同步 I/O 多工 也有提到"如果你用一行緩衝區(buffer)的終端機,那麼你從鍵盤輸入資料後應該要盡快按下 Enter,否則程式就會發生 timeout。" 1.請教什麼是一行緩衝區? 2.為什麼程序起來後,還需要按enter, stdin才會ready? stdin 緩衝區裏面是還有東西 沒清空? 3. https://imgur.com/Mua5xCJ 為什麼程序不會read newline? 請問有人能解答嗎 ? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1575456241.A.73E.html
dododavid006: 1,2 都是因為預設 tty 或 pty 是 line buffer 的, 12/04 20:31
dododavid006: 就是要到輸入換行你才讀的到東西,你可以看看 12/04 20:33
dododavid006: man 3 stdin 底下的 Notes 有提到,也可看看 stty 12/04 20:33
dododavid006: 這個指令, 3 應該是說因為你的程式並沒有把東西讀 12/04 20:34
dododavid006: 走,所以變成 shell 去讀到了 12/04 20:34
anoymouse: 不懂為什麼3 我的程式沒有把new line讀進去? 12/05 10:49
wens: 因為你只有select沒有read. select只是告訴你有沒有資料可以 12/05 11:21
wens: 讀取。真的要讀取要另外read。 12/05 11:21
anoymouse: 好瞭解 剛剛用getchar收到newline 了 12/05 13:07