1

私はこのコードをインファイルからアウトファイルにコピーしています。問題は、アウトファイルの最後に大量のゴミが追加されていることです

ssize_t nread;
int bufsize=512;
char buffer[bufsize];

while ( (nread=read(infile, buffer, bufsize)>0))
{
    if( write(outfile, buffer, bufsize)<nread ) 
    {
        close(outfile); close(infile); printf("error in write loop !\n\n");
        return (-4);
    }
}
if( nread == -1) {
  printf ("error on last read\n"); return (-5);
}//error on last read /

これを修正するにはどうすればよいですか?

4

1 に答える 1

5
while ( (nread=read(infile, buffer, bufsize)>0))

次のようにする必要があります。

while ( (nread=read(infile, buffer, bufsize)) >0 )

as> は に比べて優先度が高くなり=ます。

また

write(outfile, buffer, bufsize)

bufsizeあなたは常にバイト数を書いています。ただし、読み取り操作で読み取られるバイト数が多くなる必要はありません。これは、コピーの最後の繰り返しで発生する可能性があります。これを修正するにnreadは、バイト数を書き込む必要があります。

于 2012-10-22T02:19:13.103 に答える