2017-05-05 11 views
-1

2回目のwhileループで何回の反復が起こるかを尋ねられます。私の答えは無限ですが、このコードを実行すると10912回の繰り返しがあり、プログラムは単に印刷を停止します(ただし、Ctrl + Cキーを押して終了する必要があるため、終了しないようです)。なぜこのCコード(Unixパイプへの書き込み)は無限に繰り返されませんか?

どうしてですか?私はその特定の数字が何かの限界/最大値であるとは見当たりませんでした。

char string [] = “hello”; 

void main() 
{ 
    char buf[1024]; 
    char *cp1, *cp2; 
    int fds[2]; 
    cp1 = string; 
    cp2 = buf; 
    while (*cp1) 
    *cp2++ = *cp1++; 
    pipe(fds); 
    int i = 0; 
    while(1) 
    { 
     write(fds[1], buf, 6); 
     i++; 
     printf("i: %d", i); 
    } 
} 
+0

バッファーを超過した可能性があります。余裕がなくなるまでブロックしています。 – Carcigenicate

+0

パイプの反対側に何かがありますか?そうでない場合、パイプに内部バッファがあり、空になるまで書き込むことはできません。 – kichik

+0

'int main()'にする必要があります。 –

答えて

3

あなたはパイプに書き込んでいますが、パイプの反対側からは読み取ることはありません。そのため、データはパイプバッファに入り、一旦バッファがいっぱいになると、追加の書き込みブロックが発生し、パイプからの読み出しによってブロックが解除されないため、プログラムがハングします。あなたのシステムでは、パイプバッファーのサイズは、停止前に65,472バイトを書き込むのに成功しているので、64k(65,536バイト)またはわずかに少ないように見えます。

関連する問題