使用fork的C程序在用户输入后退出并退出'

时间:2016-11-10 16:41:45

标签: c time unix-socket

我们的任务是在一个c代码中创建双向通信模拟。这是我第一次涉足这种代码,所以我创建了这个简单的代码:

{{1}}

当USER 1或USER 2输入退出时程序终止。然而....

错误是每当我按退出键时,它都会打印"发送给用户x"首先然后继续退出。我怎样才能解决这个问题?有帮助吗?感谢。

1 个答案:

答案 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);
}