我的程序如下:交互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