2013-08-10 5 views
-1

리눅스에서 파이프 번호를 쓰는 코드를 작성했습니다. 그것은 아래에 있지만, 오류를 보여줍니다, 아무도 이것에 나를 도울 수 있습니다.리눅스에서 파이프를 사용하는 프로세스 간 통신

기본적으로 프로그램에 대한 문제는 다음과 같습니다. - 하나의 프로그램이 파이프를 열고 파이프에 숫자를 씁니다. - 다른 프로그램이 동일한 파이프를 열어 번호를 읽고 인쇄합니다. - 모두 닫습니다 파이프

int main() 
{ 

int number; 




FILE *fout; 

fout = popen(" ","w"); 



pclose(fout); 

return 0; 

} 

이제 내 질문에 내가 더 이상 진행 및 파이프에 숫자를 쓸 수 있도록 (위의 빈과 같이) 내가는 popen 명령 옵션에 제공해야하는지 명령입니다.

+0

당신이 두 개의 서로 다른 프로그램 또는 프로세스를 분기 및 파이프로 통신 같은 프로그램이 있습니까? –

+0

질문은 http://stackoverflow.com/q/18087047/841108과 매우 유사합니다! –

답변

1

먼저 mknod 명령을 사용하여 명명 된 파이프를 만듭니다. mknod pipe p. 그런 다음 파일을 마치 마치 함수처럼 읽고 쓰십시오. 코드를 사용하여 mknod 기능을 사용하여 노드를 만들 수도 있습니다. 오류 코드 EEXIST을 찾으십시오. 자세한 내용은 여기를 참조하십시오. http://linux.die.net/man/2/mknod

+0

나는 운동이 명명 된 파이프, 즉 FIFO에 관한 것이 아니라'pipe (2)'에 대해서 생각하지 않는다. –

+0

나는 부모가 자식을 포크하고 양쪽 모두가 부모와 자식 모두에서 파이프에 접근하는 곳에서'pipe'가 사용 된 것 같다. 요구 사항에 따라 파이프의 한쪽 끝이 닫힙니다. 나는'process' 대신에'program'이라는 용어와 혼동을 겪었습니다. 두 개의 다른 실행 가능하고 지명 된 파이프라고 생각했습니다. '하나의 프로그램은 파이프를 열고 파이프에 숫자를 씁니다. - 다른 프로그램에서 동일한 파이프를 열어서 번호를 읽고 인쇄 할 것입니다. –

1

IPC와 파이프가 어떻게 작동하는지 잘 알지 못합니다. 좋은 책을 읽어주세요. Advanced Linux Programming에는 이러한 문제에 대한 몇 가지 장이 있습니다.

우리는 그러한 좋은 책이 다루는 어려운 개념을 설명 할 시간이 없습니다. 몇 시간이 걸릴 수 있습니다!

라이브러리 기능 popen(3)은 명령을 실행합니다. 아마도 시스템에 p 명령이 없습니다. fp이 NULL이고 errno이 설정되어 있다고 생각합니다.

popenpipe(2), fork(2), dup2(2), execve(2)/bin/sh -c을 사용하는 등