所以我试图在C中创建一个程序,它可以通过UDP从另一台计算机接收数据包,同时也可以在有人在命令行中“退出”时停止监听。我的问题是fgets和recvfrom都等到事情发生了,所以如果我正在执行fgets,我的程序将忽略传入的消息,如果我正在等待消息,它将忽略对终端的输入。有什么方法可以同时做到这两件事吗?
相关守则:
while (strcmp(sendline, "quit")!=0) {
fgets(sendline,MAXLINE,stdin);
if((nbytes=recvfrom(sd,recvline,1+strlen(sendline),0,
(struct sockaddr*)&sad, &fromlen))<0){
perror("recvfrom");
exit(1);
}
}
答案 0 :(得分:3)
如果切换到使用低级IO(从fd 0读取而不是从stdin读取fread),则可以使用select()函数通知fd或socket上的数据何时就绪。