我正在創建一個子父母fork()
,以便能夠通過管道與父母通信(/bin/sh
)。execv,請選擇並閱讀
問題是: 在父級中,我在子輸出上設置了select()
,但只在進程完成時才解除阻塞!所以當我跑步說ps
沒關係。但是當我運行/bin/sh
它不會輸出,直到shell退出。但我想讀它的輸出!
for(;;) {
select(PARENT_READ+1,&sh,NULL,NULL,NULL); // This unblocks only when shell exits!
if (FD_ISSET(PARENT_READ,&sh)) {
while (n = read (PARENT_READ, &buf,30)) {
buf[30]='\0';
printf("C: %s\n",buf);
};
};
}
答案是在禁用緩衝管道領域的某個地方?
你有什麼參數exec()' - 殼?你怎麼提供一個管道?這些'pipe()'管道還是別的東西? – llasram 2010-09-17 12:07:31
文件描述符沒有緩衝。 '/ bin/sh'可能只是在等待你的輸入 - 在發回任何東西之前。 – Dummy00001 2010-09-17 12:08:46
1)我做了/ bin/sh的execv/execve 2)pipe()是一個管道,是的。 – JAmes 2010-09-17 12:09:40