0

我有一个子进程调用从标准输入和输出到标准输出的单词的 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 命令。尽管如此,任何提示将不胜感激。谢谢]

4

1 回答 1

0

gcc -Wall你真的应该用;编译你的代码。你removeDups不能工作,因为它返回一个自动本地数组。

您需要了解有关fork,execvepipe(2)dup2(2)系统调用的更多信息。也许popen(3)对您也有用。

我强烈建议阅读一些好书,例如Advanced Linux Programming,其中有一章介绍了这些内容。

于 2013-02-19T06:57:57.077 回答