【发布时间】:2015-05-15 12:03:47
【问题描述】:
我正在尝试与stdin 和stdout 进行进程间通信。我找到的 Posix 函数是 popen,但我没有编写一个有效的示例代码。请帮我完成这项工作。
我必须使用dup 吗?我可以看到一些 Google 使用它的例子。但是dup 的 Linux 手册确实不能帮助我理解如何使用它。
交流
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char *s;
for(;;){
scanf("%ms",&s);
printf("%s\n",s);
if(!strcmp(s,"quit")){
free(s);
printf("bye~\n");
exit(EXIT_SUCCESS);
}
free(s);
}
}
b.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
FILE *fRead;
FILE *fWrite;
char *s;
int i;
fRead=popen("~/a.out","r");
fWrite=popen("~/a.out","w");
for(i=1;i<=10;++i){
fprintf(fWrite,"%d",i);
fscanf(fRead,"%ms",&s);
printf("%s\n",s);
free(s);
}
}
【问题讨论】:
-
你知道你开始
a.out两次,不是吗? -
@alk 我确实看到了问题,那么如何同时读取输出?
-
使用
popen("~/a.out >output", "r")并阅读output。 -
@xiver77,或使用
pipe()/dup()/fork()/exec()使用覆盖的IO 启动进程,然后使用poll()多路复用输入/输出。