0
write()
, read()
함수를 사용하여이 프로그램을 코딩 할 수 있다는 것을 알고 싶습니다. argv[]
다음에 fork()
으로 2 개의 초기 인수를 취하고 그 하위 프로세스 'stdout이 부모 stdin에게 전달되고 결과가 화면에 표시됩니다.C에서 파이프를 빌드하는 다른 방법이 있습니까?
나는 --->./program date wc
그것은 date | wc
쉘 프로그래밍에서와 같이 같은 결과를 제시해야이 같은 프로그램을 실행할 때.
이 프로그램을 dup()
으로 코딩했습니다. 그것은 잘 작동하지만 나는 다른 방법으로 주위에 싶어요. 고맙다. 그리고 나의 영어에 대해 유감스럽게 생각한다. dup2에와
int main(int argc, char* argv[]){
char* argument1[]={argv[1], NULL};
char* argument2[]={argv[2], NULL};
int fd[2];
int d;
pid_t pid;
char buffer[30];
if(argc < 3){
printf("No parameter");
return 1;
}
if(pipe(fd)==-1){
perror("pipe failed");
exit(1);
}
else{
pid=fork();
if(pid==0){
/*child process*/
close(1);
dup(fd[1]);
close(fd[0]);
//close(fd[1]);
execvp(argument1[0], argument1);
}
else if(pid>0){
/*Parent process*/
close(0);
dup(fd[0]);
close(fd[1]);
//close(fd[0]);
execvp(argument2[0], argument2);
}
}
return 0;
}
내가 명확하지 않다 확실히 어떤 문제가 있거나 당신이 후입니다. 자식 프로세스 코드에는'close (fd [1]);', 부모 프로세스 코드에는'close (fd [0]);가 있어야한다. 또한 오류를보고하고 각각의'execvp()'다음에 종료해야합니다. 'execvp()'에서 반환 값을 테스트 할 필요는 없습니다. 오류가 있으면 리턴합니다. (close)와 dup() 대신에'dup2()'를 쓰는 것이 일반적으로 더 쉽지만 코드는 좋아 보인다. (더 큰 맥락에서는 문제가 될 수 있지만,() '와 같이 표시됩니다. –