내 프로그램은 다음과 같다 :대화 형 쉘 정지 파이프
//... 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);
}
}
이 실행 OK, I 대화 형 쉘, 첫 번째 명령을 실행 한 후 내 프로그램 중지를 강제로 exec("/bin/sh","sh","-i",NULL)
와 exec("/bin/sh","sh",NULL)
를 교체하려고하지만 경우.
저는 파이프가 처음이에요. 이유를 이해하고 상호 작용하는 쉘 작업을 도와주세요. 나는 또한 코드를 읽고 파이프를 전달하는 것이 약간 이상하다고 생각합니다. 동일한 행동을 달성하는 방법?
dup2 다음에 fd [0]을 닫고 쓰기가 끝나면 fd [1]을 닫으십시오. –