我们的任务是在一个c代码中创建双向通信模拟。这是我第一次涉足这种代码,所以我创建了这个简单的代码:
{{1}}
当USER 1或USER 2输入退出时程序终止。然而....
错误是每当我按退出键时,它都会打印"发送给用户x"首先然后继续退出。我怎样才能解决这个问题?有帮助吗?感谢。
答案 0 :(得分:0)
当你在发送过程中输入exit
时,它会跳出循环,关闭它的管道末端并退出。
当其他进程尝试从管道中读取时,它将获得一个EOF,由read()
返回0
表示。但是,您的代码从不检查此内容,它仅在read()
或write()
返回负值以指示错误(EOF不是错误)时退出。因此它返回到循环的顶部并要求输入发送到其他进程。当它尝试写入已关闭的管道时,它将收到EPIPE
错误或SIGPIPE
信号,然后它将退出。
将您的阅读代码更改为:
int n = read(readpipe[0],buf,sizeof(buf));
if (n == 0) {
break;
} else if (n < 1) {
exit(1);
}