2012-12-03 3 views
1

간단한 쉘을 구현하려고합니다. 나는 포크 공정이 방법 :C에서 파이프 구현?

void forkProcess(char* cmd[]) { 
    pid_t pid; 
    char programPath[BUFFERLENGTH] = "/bin/"; 
    strcat(programPath, cmd[0]); 
    int exitStatus; 
    pid = fork(); 
    switch (pid) { 
    case -1: 
     printf("Fork failed; pid == -1\n"); 
     break; 
    case 0: 
     execv(programPath, cmd); 
     exit(0); 
     break; 
    default: 
     waitpid(pid, &exitStatus, 0); 
     //printf("Exitstatus = %d\n", WEXITSTATUS(exitStatus)); 
     break; 
    } 
} 

는 이제 cmd 매개 변수는 파이프, 예컨대 :

"ls" "-l" "|" "grep" "whatever" "(char*)NULL";

그래서 어떻게 파이프 기능을 구현할 수 있습니다 포함되어있을 수 있습니다? pipe()dup()과 같은 기능이 있지만이 컨텍스트에서 사용하는 방법을 알지 못합니다.

주셔서 감사합니다.

답변

1

fork()을 시작하기 전에 명령 줄을 완전히 구문 분석해야합니다.

파이프 연산자를 사용하는 경우 fork()을 호출하기 전에 파이프를 설정해야합니다.이 파이프는 상속됩니다.

일반적으로 파이프를 포크 프로세스의 표준 입력으로 바꾸려면 close() 및 종종 dup()을 사용해야합니다.

큰 그림을 "얻으려면"이 기능을 계속 읽거나 Unix I/O를 다루는 책을 읽으십시오.

0

이 경우 popen()을 사용할 수 있습니다.