[问题] 关于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