使用 select() 从 stdin 读取 - 以非阻塞方式
我正在编写一个执行服务器-客户端关系的程序。
在程序中,我使用 select()
来获取客户端的请求,以及来自标准输入的用户请求(服务器后面的请求)。
看起来 select()
可以很好地满足客户端的请求,但似乎无法响应来自 stdin
的输入。
另外,我没有成功从 stdin
进行 recv()
。 有没有办法以非阻塞方式从标准输入获取输入?我尝试使用 fgets()
而不是 select()
,并且我已将 fcntl()
设置为非阻塞,它似乎不起作用 - 它仍然阻塞。
你有什么建议? 谢谢。
i'm writing a program that perform server-client relations.
In the program, i'm using select()
in order to get the client's requests, and also the user's requests(the one behind the server) from the stdin.
What it seems to be is that the select()
works fine for the client's requests, but doesn't seem to respond to the input from the stdin
.
Also, i don't succeed to recv()
from the stdin
.
Is there a way to get an input from the stdin in a non-blocking way? I've tried using fgets()
instead of select()
, and tho i've set the fcntl()
to be non-blocking, it doesn't seem to work - it is still blocking.
What do you suggest?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
stdin 是行缓冲的 - 您无法以非阻塞方式读取它。
stdin is line-buffered - you cannot read from it in a non-blocking way.
您始终可以使用 kbhit 来查看输入缓冲区上是否有任何字符可供使用读。
如果您无权访问
kbhit
,这里是我过去使用过的一个简单实现:You could always use kbhit to see if there are any characters on the input buffer ready to be read.
In the event you do not have access to
kbhit
, here is a simple implementation I have used in the past: