sort
기다리고 있지만 뭐? 나는 그것을 시도했고 execlp("head", "head", "-n", "3", NULL);
훌륭하게 sort
작동합니다.
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <assert.h>
int main()
{
int p[2], cat_pid, sort_pid;
if (pipe(p) < 0) { assert(0 && "pipe fail"); }
if ((cat_pid = fork()) == 0) { dup2(p[1], 1); execlp("cat", "cat", "text", NULL); assert(0 && "cat fail"); }
if ((sort_pid = fork()) == 0) { dup2(p[0], 0); execlp("sort", "sort", NULL); assert(0 && "sort fail"); }
waitpid(sort_pid, NULL, 0);
}
입력은 다음 text
과 같습니다
hello
world
foo
bar
답변1
EOF를 기다리는 동안 sort
파이프의 쓰기 쪽을 닫아야 합니다. 하나는 완료 후 닫히고 cat
다른 하나는 상위 프로세스에 있습니다. 상위 파이프의 쓰기 쪽을 닫으면 모든 것이 잘 됩니다.
man 7 pipe
파이프의 쓰기 끝을 참조하는 모든 파일 설명자가 닫힌 경우 파이프에서 read(2)를 시도하면 파일 끝이 표시됩니다(read(2)는 0을 반환함).