2010-04-16 3 views
0

bash 셸에서 단어 수에 대한 자체 코드를 작성하려고합니다.
나는 평소대로했다. 하지만 나는 파이프의 출력을 사용하여 단어를 세고 싶습니다.
예를 들어 첫 번째 명령은 cat이고 med라는 파일로 리디렉션하고 있습니다.
이제 'dup2'함수를 사용하여 해당 파일의 단어를 계산해야합니다. 내 wc 코드를 어떻게 작성합니까? 단어 수 bash 셸을 구현하는 방법

내 쉘 PGM 코드입니다 :

void process(char* cmd[], int arg_count) 
{  
    pid_t pid; 
    pid = fork(); 
    char path[81]; 
    getcwd(path,81); 
    strcat(path,"/"); 
    strcat(path,cmd[0]); 
    if(pid < 0) 
    { 
     cout << "Fork Failed" << endl; 
     exit(-1); 
    } 
    else if(pid == 0) 
    { 
     int fd; 
     fd =open("med", O_RDONLY); 
     dup2(fd ,0); 
      execvp(path, cmd); 
    } 
     else 
     { 
     wait(NULL); 
    } 
} 

그리고 내 단어 수는 : 나는 내 코드는이 작업을 수행 할 수 입력 리디렉션 을 수행하는 방법을 잘 모릅니다

int main(int argc, char *argv[]) 
{ 
    char ch; 
    int count = 0; 
    ifstream infile(argv[1]); 
    while(!infile.eof()) 
    { 
     infile.get(ch); 
     if(ch == ' ') 
     { 
      count++; 
     } 
    } 
    return 0; 
} 

: 필자가 셸 구현에 wordcount를 입력하면 기본적으로 med 파일의 단어 수를 계산하려고합니다. 미리 감사드립니다.

+1

숙제 일 수도 있습니다. '숙제'태그를 추가하는 것을 고려하십시오. –

답변

4

wc (단어 수) 프로그램을 사용하지 않으시겠습니까? 출력을 wc -w으로 파이프하면 작업이 완료됩니다.

2

단어 수 계산 프로그램은 항상 argv[1]을 입력 파일로 사용합니다. stdin 또는 주어진 파일로부터 읽기를 지원하려면, 프로그램에 주어진 인수의 수에 기초하여 입력에 사용하는 것을 변경해야합니다.

std::streambuf* buf; 
std::ifstream infile; 
if (argc > 1) 
{ 
    // Received an argument, so use it as a source file 
    infile.open(argv[1]); 
    if (!infile) 
    { 
     perror("open"); 
     return 1; 
    } 
    buf = infile.rdbuf(); 
} 
else 
{ 
    // No arguments so use stdin 
    buf = std::cin.rdbuf(); 
} 

std::istream input(buf); 
while (!input.eof()) 
{ 
    ... 
} 
... 
관련 문제