2016-10-14 60 views
0
#include <stdio.h> 
#include <unistd.h> 

int fd[2]; 
int check = pipe(fd); 

int main() 
{ 
    pid_t pid; 
    int read_int=0; 

    pid=fork(); 

    if(pid==0) 
    { 
     execl("./getvalue.out","getvalue.out",(char *)0); 
    } 
    else 
    { 
     close(fd[1]); 
     read(fd[0],&read_int,sizeof(read_int)); 
     printf("Receive: %d\n",read_int); 
     close(fd[0]); 
    } 
    wait(0); 
} 

这是getvalue.cpp:(用于创建getvalue.out如何从子进程写入父进程的值?

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

int main(void) 
{ 
    int fd[2]; 
    int write_int=100; 
    close(fd[0]); 
    write(fd[1],&write_int,sizeof(write_int)); 
    close(fd[1]); 
} 

所以read_int总是0,而不是使用execl()子过程中收到的100值。我想问题是他们没有共享管道?

+0

这实际上是C,而不是C++(即使它可能可以通过C++编译器编译,但此处显示的所有代码都使用C API并以C风格编写) – UnholySheep

+0

http://stackoverflow.com/的副本问题/ 11461106/socketpair式-C-UNIX – UKMonkey

回答

0

您的getvalue代码的fd []不再指向管道。将parent中的fd [1]值作为命令行参数传递给子进程。