Linux-popen 执行其他程序,如何既是这个程序的输入又是输出

发布于 2016-10-28 20:02:00 字数 252 浏览 1329 评论 1

如b.c,会编译成b,这个程序就是读取用户的输入,然后打印出来,代码如下:

#include <stdio.h>
int main(){
int input = 0;
scanf("%d", &input);
printf("input_num is %dn", input);
return 1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2017-05-15 00:05:06

1应该是不行的.

2或者如何让popen既是输入又是输出;-- popen打开的是单向的pipe. 如果需要双向的. 自己写一个.
b.c不变

a.c如下:

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void err_sys(char* msg)
{
perror(msg);
exit(-1);
}

int
main()
{
int fd[2]; //write by parent, read by child
int fd1[2]; //write by child, read by parent
int pid;
if(pipe(fd) < 0)
err_sys("pipe error");
if(pipe(fd1) < 0)
err_sys("pipe1 error");
if((pid = fork()) < 0)
err_sys("fork error");
else if(pid > 0){//parent
close(fd[0]); //not read fd
close(fd1[1]); //not write fd1
if(write(fd[1], "2n", 2) < 0)
err_sys("write error");
char tmp[255];
int n;
if((n = read(fd1[0], tmp, 255)) < 0)
err_sys("read error");
if(write(1, tmp, n) < 0)
err_sys("write error");
}else{ //child
close(0);
close(1);
close(fd[1]); //not write fd
close(fd1[0]); //not read fd1
dup2(fd[0], 0);
dup2(fd1[1], 1);
if(execl("./b", NULL) < 0)
err_sys("exec error");
}
if((waitpid(pid, NULL, 0) < 0))
err_sys("wait_pid error");
return 0;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文