我有一个子进程在从stdin传出的单词和stdout上调用cat命令。如何在子进程被cat进程替换之前调用函数removeDups()?
fyi removeDups()将捕获管道单词,删除任何重复项,记录频率,并将单词列表发送回子进程以打印到屏幕或直接打印到屏幕。这是一个代码片段(更像是伪代码):
int main(int argc,char **argv)
{
//...Child case(from fork() switch above):
case 0:
execl("/bin/cat", "cat", (char *) NULL);
}
char[][] removeDups()
{
char uniqueWords[MAX_WORDS][BUF_SIZE];
char buf[BUF_SIZE];
while (fscanf(stdin, "%s", buf) != EOF)
{
int k;
for (k = 0; k < MAX; ++k)
{
if (strcmp(uniqueWords[k], buf) == 0)
{
found = 1;
frequency[k]++;
}
}
int l;
if (found == 0)
{
strcpy(uniqueWords[l], buf);
++l;
{
}
return uniqueWords;
}
[编辑:我意识到最好不要使用cat命令。仍然,任何提示将不胜感激。 THX]
答案 0 :(得分:0)
你真的应该用gcc -Wall
编译你的代码;您的removeDups
无法正常工作,因为它会返回一个自动本地数组。
您需要详细了解fork
,execve
和pipe(2)以及dup2(2)系统调用。也许popen(3)也可能对你有用。
我强烈建议您阅读一些好书,例如Advanced Linux Programming,其中有一章介绍这些事情。