私は、1024バイトで1024バイトのファイル(ランダムな時間をランダムに繰り返したもの)を読み込み、FIFOパイプで送信する簡単なプログラムをコーディングしています。 。
私のファイルのサイズが2007Bの場合、最初の読み込み(fdFile、buffer_f、1024)が正しく読み込まれ、最後に4が?qRのようなランダムな文字になります。
次に、2回目の読み取りでは、返される値は983になりますが、バッファには以前の1024と同じ文字列が含まれています。
誰かがなぜplzを知っていますか?
私のFIFOから読み込むと、同じことが起こりますが、最後に異なるランダムな部分文字列があります。read()バッファに余分な文字を埋めてください
while((buffer_f_size = read(fdFile, buffer_f, 1024)) > 0){
printf("Partida leida en el archivo arg : \n%s\nTamano de la partida : %d\n", buffer_f, buffer_f_size);
fflush(stdout);
if(write(fdprox, buffer_f, buffer_f_size) != buffer_f_size){
perror("Error en la lectura/escritura del archivo en el FIFO_proxy");
exit(-1);
}
}
Part of the execution concerned
完璧です。 FIFOから読み込まれた他のプログラム(サーバ)は、tdファイルに結果を格納して、ファイル全体をstdoutに書き込む前に待機します。ブロック(まだ1024Bの)が読み取られるたびに、それは合計サイズの変数をインクリメントします。ファイルがtmpfileに完全に入っていると、サーバーはsize_totalというサイズの1ブロックでそれを読み取り、stdoutに書き換えます。しかし、私が得た結果によると、読み込まれた最初のブロックだけがtmpfileにあり、残りの文字(size_total - 1024)はやはりランダムな文字であるようです。 –
@RomainArtru:サーバー側で同じ問題が発生している可能性があります。ヌル終了を想定するクライアントサーバー通信の古典的なバグです。バッファの内容を出力するには、 'printf()'や 'fputs()'の代わりに 'fwrite()'を使います。 – chqrlie
私は実際に使用しました: 'write(STDOUT_FILENO、buffer_f、size_total)' –