0

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 コマンドをまったく使用しない方がよい場合があることに気付きました。それでも、ヒントをいただければ幸いです。どうも]

4

1 に答える 1

0

gcc -Wallコードを;でコンパイルする必要があります。自動ローカル配列を返すため、機能しremoveDupsません。

forkpipe(2)execveおよびdup2(2)システムコールについてさらに学ぶ必要があります。おそらくpopen(3)も役に立つでしょう。

これらのことについての章があるAdvanced Linux Programmingのような良い本を読むことを強くお勧めします。

于 2013-02-19T06:57:57.077 に答える