如何从子进程调用stdout上的函数?

时间:2013-02-19 06:47:41

标签: function process call

我有一个子进程在从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]

1 个答案:

答案 0 :(得分:0)

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

您需要详细了解forkexecvepipe(2)以及dup2(2)系统调用。也许popen(3)也可能对你有用。

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