execlp, fork 및 파이프를 사용하여 간단한 프로그램을 만들려고 할 때 몇 가지 문제점이 있습니다. 현재 사용중인 프로그램은 "last | head -5 | sort"를 수행하도록 제안되었지만 작동하지 않습니다. 여기에 코드가 있습니다.유닉스에서의 다중 프로그래밍
#include <string.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
//last |head -5| sort
int main(int argc, char* argv[]){
int buzon[2];
int buzon2[2];
if(pipe(buzon) < 0)
error("error de pipe");
switch(fork()){
case -1:
error("error de fork");
case 0:
if(close(1) < 0) error("error de close");
if(dup(buzon[1]) < 0) error("error de dup");
if(close(buzon[0]) < 0) error("error de close");
if(close(buzon[1]) < 0) error("error de close");
execlp("last", "last", NULL);
error("error de execlp");
}
switch(fork()){
case -1:
error("error de fork");
case 0:
if(close(0) < 0) error("error de close");
if(close(1) < 0) error("error de close");
if(dup(buzon[0]) < 0) error("error de dup");
if(dup(buzon[1]) < 0) error("error de dup");
if(close(buzon[0]) < 0) error("error de close");
if(close(buzon[1]) < 0) error("error de close");
execlp("head", "head", "-n 5", NULL);
error("error de execlp");
}
switch(fork()){
case -1:
error("error de fork");
case 0:
if(close(0)<0) error("error de close");
if(dup(buzon[0]) != 1) error("error de dup");
if(close(buzon[0]) < 0) error("error de close");
if(close(buzon[1]) < 0) error("error de close");
execlp("sort", "sort", NULL);
error("error de execlp");
}
if(close(buzon[0]) < 0) error("error de close");
if(close(buzon[1]) < 0) error("error de close");
while(wait(NULL) != -1);
}
무엇이 실패했는지에 대한 아이디어. 문제는 2 개의 파이프를 사용할 때입니다. 제가 파이프를 1 개만 사용하는 프로그램을 만들면 작동합니다.
당신이 오류 메시지 나 errno에 번호가 있습니까? –