如何实现字数bash shell

时间:2010-04-16 16:45:19

标签: c

我正在尝试为bash shell中的单词count编写自己的代码 我做的很平常。但我想用烟斗的输出来计算这个词 因此,例如,第一个命令是cat,我将重定向到名为med的文件 现在我必须使用'dup2'函数来计算该文件中的单词。我怎样才能为我的wc编写代码?

这是我的shell 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;  
}  

我不知道如何进行输入重定向 我希望我的代码执行此操作: 当我在shell实现中输入wordcount时,我希望它默认计算med文件中的单词。 提前致谢

2 个答案:

答案 0 :(得分:4)

为什么不使用wc(字数统计)程序?只需将输出传输到wc -w即可。

答案 1 :(得分:2)

您的字数统计程序始终使用argv[1]作为输入文件。如果您想支持从标准输入或给定文件中读取,那么您需要根据给予程序的参数数量更改用于输入的内容。

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())
{
    ...
}
...