これは私のプログラムの一部です:
while((total_bytes_read != fsize) && ((nread = read(f_sockd, filebuffer, fsize_tmp)) > 0)){
if(write(fd, filebuffer, nread) != nread){
perror("write RETR");
onexit(f_sockd, 0, 0, 1);
}
total_bytes_read += nread;
fsize_tmp -= nread;
}
ここでtotal_bytes_read, fsize, nread
、はとして宣言されuint32_t
ます。
64ビットマシンでは問題はありません。コンパイルと実行は非常にうまくいきます(コードのこの部分はファイルを受け取る必要があります)。
問題は、このエラーが発生したために32ビットマシンでコンパイルする場合です。プログラムに変更するとファイルを受信しなくなりますが、ファイルの内容(の一部)warning: comparison of integers of different signs: 'ssize_t' (aka 'int') and 'uint32_t' (aka 'unsigned int') [-Wsign-compare] if(write(fd, filebuffer, nread) != nread){
が出力されるため、この問題を解決する方法がわかりません。 stdoutに。
なぜ私はこの奇妙な振る舞いをしたのですか、そしてどうすればこれを解決できますか?if(write(fd, filebuffer, nread) != nread){
if(nread != (uint32_t)write(fd, filebuffer, nread)){