파이프 질문입니다.

luftpalen의 이미지

차일드 프로세스를 만들어서 그쪽에다 명령을 주려고 파이프를 연결하는데, 잘 되지 않더군요.

pid_t fork_result;

if(pipe(file_pipe) == 0)
{
fork_result = fork();

if( fork_result == -1)
{
fprintf(stderr,"Fork Error!!\n");
exit(1);
}

if( fork_result == 0)
{
close(0);
dup( file_pipe[0]);
close(file_pipe[0]);
close(file_pipe[1]);

execl("test","test",NULL);

}else{
close(file_pipe[0]);
write(file_pipe[1], msg, strlen(msg));

}

대충 이런 식이고 fork() 시킬 차일드 프로세스는 단순히
read(stdin, buf, 1); 이런 식으로 읽기만 하는데,
차일드 프로세스는 읽지를 못하더군요. 제가 잘못해서 그러니까 안되는건데, 어디가 잘못된지 모르겠더군요. 조언 부탁드립니다.

kewlbear의 이미지

popen은 어떨까요?

마잇의 이미지

전 일단 C를 잘 모릅니다.

close(file_pipe[0]);
write(file_pipe[1], msg, strlen(msg));

혹시 이 부분이 자식 프로세스에 내용을 전달하는 작업이라면 쓰기 후에 닫아주는 작업이 뒤따라와야 되지 않을까 하는 생각이 듭니다.

파이프는 일반 파일과 다른게 끄트머리를 명시적으로 알수가 없으니 닫아줘야 read의 동작이 끝나고 리턴을 할 것 같다는 생각이 스쳤습니다.

--
마잇


--
마잇