2013-07-08 104 views
1

字符串我有以下代碼:閱讀來自管

int pfds[2], pid; 

if (socketpair(AF_UNIX, SOCK_STREAM, 0, pfds) < 0) { 
     goto error; 
} 

if ((pid = fork()) == -1) 
    goto error; 

if (pid == 0) { 
    /* child */ 
    close(pfds[1]); 
    dup2(pfds[0], 1); 
    close(pfds[0]); 
    const char *argv[5]; 
    int i = 0; 
    argv[i++] = "/bin/sh"; 
    argv[i++] = "/sbin/script.sh"; 
    argv[i++] = NULL; 
    execvp(argv[0], (char **) argv); 
    exit(ESRCH); 
} 
close(pfds[0]); 
s.stream.string_data = true; 
s.stream.notify_read = client_read_cb; 
ustream_fd_init(&s, pfds[1]); 

腳本返回字符串(印有echo命令),該標記腳本裝入結束。

如何讀取/sbin/script.sh返回的字符串?

+1

'dup2(pfds [0],1);'很奇怪。通常情況下,你寫入管道的寫入端,然後從讀取端讀取數據。 (即,你期望看到'dup2(pfds [1],1)') –

回答

1

基本上你缺少執行該execv和父進程將做閱讀子進程之間的區別:

char readbuffer[100]; 

if(pid == 0) 
    ... 
else 
{ 
    close(pdfs[0]; 
    nbytes = read(pfds[1], readbuffer, sizeof(readbuffer)); 
} 

但如果你只是想等待劇本的最後,你可以只需在子進程上執行一個wait_pid。