我的程序如下:交互shell停止管
//... init fd[2] as pipe ...
if (child==0){
close(fd[1]);
dup2(fd[0], 0);
execlp("/bin/sh","sh",NULL);
} else {
close(fd[0]);
char *line; int nbytes=100; int bytes=0;
line=(char*) malloc(nbytes+1);
while ((bytes = getline((char **)&line,&nbytes,stdin))!= -1){
write(fd[1],line, bytes);
}
}
此運行正常,但是當我嘗試用exec("/bin/sh","sh","-i",NULL)
更換exec("/bin/sh","sh",NULL)
強制交互的shell,執行相應的命令後,我的程序停止。
我是新來的管道,所以請幫助我理解原因並製作交互式shell工作...我也覺得我的代碼讀取行並傳遞給子管道有點奇怪..有什麼更好的實現相同行爲的方式?
嘗試關閉所有文件描述符,在dup2之後關閉fd [0],寫完後關閉fd [1] – 2012-04-27 04:38:46