进程间双向通信的实现与优化
1. 错误处理与进程通信概述
在进程通信中,错误处理是一个重要的环节。有些错误会通过“ec”机制进行处理,而有些错误仅会打印消息,之后进程继续运行。对于那些“不可能”出现的错误,我们将其视为严重错误,因为一旦发生,可能意味着操作系统出现了严重问题。不过,这是一种折中的处理方式,因为我们既不想忽略这些错误,也不想为可能永远不会出现的情况编写恢复代码。但有时我们的判断可能有误,一些原本认为不可能的错误实际上会发生,这时就需要修改代码来不同地处理这些错误。
2. 单向管道的双向通信
2.1 示例引入
我们希望从shell常用的单向管道通信拓展到双向通信。典型的shell没有提供设置进程间双向通信的符号,双向管道通常通过C程序来设置。以调用 sort 命令对数据进行排序为例,我们不希望通过文件中转的方式,而是希望直接通过管道将数据传递给 sort ,并让 sort 将排序后的结果通过管道返回。
2.2 错误示例
以下是一个使用单个管道进行双向通信的错误示例:
void fsort0(void) /* wrong */
{
int pfd[2], fd;
ssize_t nread;
pid_t pid;
char buf[512];
ec_neg1( pipe(pfd) )
ec_neg1( pid = fork() )
if (pid == 0) { /* child *
进程间双向通信实现与优化
超级会员免费看
订阅专栏 解锁全文
1474

被折叠的 条评论
为什么被折叠?



