我正在尝试为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文件中的单词。 提前致谢
答案 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())
{
...
}
...