[問題] 關於select() 範例的問題

看板LinuxDev作者 (沒有暱稱)時間5年前 (2019/12/04 18:44), 編輯推噓0(009)
留言9則, 3人參與, 5年前最新討論串1/1
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

12/04 20:31, 5年前 , 1F
1,2 都是因為預設 tty 或 pty 是 line buffer 的,
12/04 20:31, 1F

12/04 20:33, 5年前 , 2F
就是要到輸入換行你才讀的到東西,你可以看看
12/04 20:33, 2F

12/04 20:33, 5年前 , 3F
man 3 stdin 底下的 Notes 有提到,也可看看 stty
12/04 20:33, 3F

12/04 20:34, 5年前 , 4F
這個指令, 3 應該是說因為你的程式並沒有把東西讀
12/04 20:34, 4F

12/04 20:34, 5年前 , 5F
走,所以變成 shell 去讀到了
12/04 20:34, 5F

12/05 10:49, 5年前 , 6F
不懂為什麼3 我的程式沒有把new line讀進去?
12/05 10:49, 6F

12/05 11:21, 5年前 , 7F
因為你只有select沒有read. select只是告訴你有沒有資料可以
12/05 11:21, 7F

12/05 11:21, 5年前 , 8F
讀取。真的要讀取要另外read。
12/05 11:21, 8F

12/05 13:07, 5年前 , 9F
好瞭解 剛剛用getchar收到newline 了
12/05 13:07, 9F
文章代碼(AID): #1TvutnS- (LinuxDev)
文章代碼(AID): #1TvutnS- (LinuxDev)