1

コードのブロックは次のとおりです。

int somefunc() {
    /* ... */
    while ((pos = KMP_index(array, size, pattern, plen)) > -1) {
        count++;
    }
    return count;
}

somefunc()複数の子プロセスで呼び出され、フォークごとに 1 回呼び出されます。

私のコードは、Linux x86_64 および i386 で期待どおりにコンパイルおよび動作します。しかし、Atom ネットブック (Arch Linux i686) で実行すると、count変数が 2 を超えることはありません!

while (...) {
    count++;  //succesfully increments 
}
return count; //it's maximum 2!

ただし、 printf() を追加すると:

while (...) {
    count++;  //succesfully increments
    printf("%d", anything);
}
return count; //value as expected

空の文字を出力したりfflush、stdout を実行したりすることは、ここでは機能しません。少なくとも 1 文字を出力する必要があります。その場合にのみ、変数は問題ありません。そして、それは私を夢中にさせます。

なぜそのような「回避策」を使用する必要があるのでしょうか。私のLinux環境の問題でしょうか?(特別なことは何もありません、GCC 4.8、ストック カーネル) ありがとうございます。

PSソース全体はここにありますhttp://pastebin.com/4eEHMbKn。はい、宿題です :) すべてのファイルを個別のプロセスで処理する grep のようなユーティリティを作成する必要があります。

4

1 に答える 1