-2

cを使用してLinuxオペレーティングシステムでプロセス制御に取り組んでいます。fork() 関数は本当に私を混乱させます。私が知っていること:fork()が呼び出されたとき
1) の直後のコードfork()が子プロセスにコピーされます。2) どちら (親または子) が最初に実行されるかを判断できません。次のコードを実行します。

int main() {
    printf("Hi");
    fork();
    return 0;
}

私の最初の質問は、なぜ Hi を 2 回受け取るのですか? Working of fork() in linux gccで説明されていますが、それでも誰かにもっと簡単に説明してもらいたいです。

私の2番目の疑問:改行文字(\ n)を使用しても出力をsomefile.txtにリダイレクトすると、出力は次のようになります。

こんにちは

こんにちは

説明してください ...

私が見逃した場合は、詳細を教えてください。fork()

4

2 に答える 2

0

種類のバッファがあります:

フルバッファ

ラインバッファ

バッファなし

printfターミナルで使用する場合line buffer。デフォルトです。\nしたがって、バッファをフラッシュするために使用できます。バッファをフラッシュした後、1つだけを印刷しますhi

printfファイルへのリダイレクトを使用するfull buffer場合。デフォルトです。\nしたがって、バッファをフラッシュするために使用することはできません。バッファをフラッシュしないと、2つ出力されますhi

setvbuf ` を使用してバッファ タイプを変更できます。

于 2013-08-18T10:52:29.673 に答える