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

作者: anoymouse (沒有暱稱)   2019-12-04 18:43:59
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?
請問有人能解答嗎 ?
謝謝
作者: dododavid006 (朔雪)   2019-12-04 20:31:00
1,2 都是因為預設 tty 或 pty 是 line buffer 的,就是要到輸入換行你才讀的到東西,你可以看看man 3 stdin 底下的 Notes 有提到,也可看看 stty這個指令, 3 應該是說因為你的程式並沒有把東西讀走,所以變成 shell 去讀到了
作者: anoymouse (沒有暱稱)   2019-12-05 10:49:00
不懂為什麼3 我的程式沒有把new line讀進去?
作者: wens (文思)   2019-12-05 11:21:00
因為你只有select沒有read. select只是告訴你有沒有資料可以讀取。真的要讀取要另外read。
作者: anoymouse (沒有暱稱)   2019-12-05 13:07:00
好瞭解 剛剛用getchar收到newline 了

Links booklink

Contact Us: admin [ a t ] ucptt.com