c언어 pipe 예제

트윈 파이프에 대한 최신 소스 코드 (출혈 가장자리)는 Git 리포지토리를 복제하여 다운로드 할 수 있습니다 : 부모가 자식으로부터 데이터를 수신하려면 fd1을 닫고 자식이 fd0을 닫아야합니다. 부모가 자식에게 데이터를 보내려면 fd0을 닫고 자식이 fd1을 닫아야 합니다. 설명자는 부모와 자식 간에 공유되므로 항상 신경 쓰지 않는 파이프의 끝을 닫아야 합니다. 기술적 인 참고로 파이프의 불필요한 끝이 명시적으로 닫히지 않으면 EOF가 반환되지 않습니다. popen() 함수는 문자열 명령에 의해 지정된 명령을 실행합니다. 호출 프로그램과 실행된 명령 사이에 파이프를 만들고 파이프에서 읽거나 쓰는 데 사용할 수 있는 스트림에 대한 포인터를 반환해야 합니다. 부모 프로세스 내부 : 먼저 첫 번째 파이프의 읽기 끝 (fd1[0])을 닫은 다음 파이프의 끝을 작성하지만 문자열을 작성합니다 (fd1[1]). 이제 부모는 자식 프로세스가 완료될 때까지 기다립니다. 자식 프로세스 후 부모는 두 번째 파이프의 쓰기 끝을 닫고 파이프의 읽기 끝을 통해 문자열을 읽습니다(fd2[0]).

모드가 r인 경우 자식 프로세스가 시작될 때 파일 설명자 STDOUT_FILENO는 파이프의 쓰기 가능한 끝이어야 하며, 스트림이 popen(popen)에 의해 반환되는 스트림 포인터인 호출 프로세스의 파일 설명자 fileno(stream)는 파이프를 참조하십시오. 여기서이 코드에서 읽기/쓰기를 완료 한 후, 대신 프로세스를 종료 하는 부모와 자식 블록 및 프로그램 중단 이유입니다. 이는 시스템 호출을 읽는 것이 요청하는 만큼의 데이터 또는 파이프가 가지고 있는 만큼의 데이터를 가져오기 때문에 발생합니다. 참조: http://searchenterpriselinux.techtarget.com/definition/pipe http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/wait.html http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html 파일 설명자 0 ( stdin)이 닫혔고, dup() 호출이 파이프(fd0)의 입력 설명자(fd0)를 표준 입력에 복제하였다. 그런 다음 execlp()를 호출하여 자녀의 텍스트 세그먼트(코드)를 정렬 프로그램의 텍스트 세그먼트와 오버레이합니다.

02 August, 2019
Posted in Uncategorized

Author: wolff