0

私はここで、テキストファイルを指すファイル記述子であるfileDescの内容を、パイプ *pipe_d[1]* の一方の端に一度に 1 文字ずつ読み込もうとしています。これはファイルから文字を正しく出力しますが、私のwrite()は文字ではなく文字のメモリアドレスをパイプに書き込もうとしていると思います。

char x;
FILE *file;
file = fdopen(fileDesc, "a+");

while((x = fgetc(file)) != EOF)
{
  printf("%c", x);

  write(pipe_d[1], &x, sizeof(x));
}

代わりに &x にある文字をパイプに書き込むようにしたいと思います。何かご意見は?

前もって感謝します!

4

1 に答える 1

0
  1. x には問題があります。これは char であり、値 EOF を含めることはできないため、次の行は次のようになります。

    while((x = fgetc(file)) != EOF)
    

    は常に true と評価され、プログラムが永久に実行されます。intこれを解決するためにx を宣言します。

  2. 文字単位で作業したい場合は、パイプの書き込みにもfdopen(pipe_d[1], "w")使用する必要があります。fputc(fp, x)

  3. pipe(pipe_d)執筆時点ではへの呼び出しはありません。発行しましたか?

  4. への呼び出しがないfork()ので、パイプのリーダーはありますか? いいえの場合、パイプがいっぱいになった後、プログラムはブロックされます。

于 2013-03-24T14:10:39.740 に答える