[问题] stdin问题请益

楼主: anoymouse (没有暱称)   2019-12-05 15:50:11
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里面?
谢谢
作者: Schottky (顺风相送)   2019-12-05 16:14:00
问题是你说的 buffer 是什么 buffer XDDDDgetchar() 是 stdio function, stdio 默认对于 termianl是 line buffered,而这个 buffer 不是你说的那个buffer改用 read() 只读一个 char 应该就是你要的效果了
楼主: anoymouse (没有暱称)   2019-12-05 16:33:00
stdin有几个buffer? 整个过程不是一个line buffer?
作者: Schottky (顺风相送)   2019-12-05 22:57:00
你以为 getchar() 只吃一个字,其实他吃了一整行
楼主: anoymouse (没有暱称)   2019-12-06 08:04:00
我看网上是说一个字符耶 该怎么理解所谓一整行?
作者: LPH66 (-6.2598534e+18f)   2019-12-06 08:29:00
getchar() 是从 line buffer 里取出一个字符而 line buffer 在有人向它要东西时已经从终端吃一行进来了这个终端才是你所提的 stdin 内容
楼主: anoymouse (没有暱称)   2019-12-06 19:56:00
厘清一下line buffer是kernel buffer?

Links booklink

Contact Us: admin [ a t ] ucptt.com