コードのブロックは次のとおりです。
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 のようなユーティリティを作成する必要があります。