2

ループが反復を続け、可能な場合は同時にユーザーからの入力を受け取るような機能を実装したいと思います。次のコードを実装しましたが、スキャンされた変数「a」の値が印刷中に反映されません。

pid_t pid;
pid=fork();
if(pid == 0 )
{
    while(1)
    {
        printf("%d\n",a);
        sleep(1);
    }
}
else
{
    while(1)
    {
        scanf("%d",&a);
    }
}
4

5 に答える 5

3

これは、fork() を使用する 2 つの別個のプロセスがあるためです。このアプローチに従う場合は、スレッドを使用する必要があります。

于 2013-02-26T07:32:55.487 に答える
2

fork() を作成すると、プログラムの共有テキスト領域で子プロセスが作成されますが、作成された子のデータとスタック セクションは親とは異なるため、子は常に a=1 を出力します。

于 2013-02-26T08:42:46.397 に答える
0

この場合、2 つの異なるプロセスが取得され、それぞれに独自のa.

Linuxパイプを使用する必要があります。

于 2013-02-26T07:46:15.370 に答える
0

共有メモリを使用することもできますが、セマフォを使用して共有メモリ セグメントへのアクセスを同期する必要があります。

于 2013-02-26T07:58:26.880 に答える
0

fcntl() を使用して stdin を非ブロックとしてマークし、ループ内で必要なことを実行して読み取りを試みると、より高速になります。データが利用できない場合は失敗し、データがあった場合はバッファに格納されます。利用可能。それはあなたのCPUの100%を使用します。データが利用可能かどうかを確認するには、select() を使用する必要があります。

于 2013-02-26T07:50:20.130 に答える