2016-10-14 64 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]值作爲命令行參數傳遞給子進程。