0

这是我的程序的一部分:

  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){
我不知道如何解决这个问题,因为如果我更改if(write(fd, filebuffer, nread) != nread){ if(nread != (uint32_t)write(fd, filebuffer, nread)){程序不再接收文件但它打印(部分)文件内容到标准输出。
为什么我会出现这种奇怪的行为,我该如何解决这个问题?

4

1 回答 1

3

只需使用正确的类型。标准说:

ssize_t read(int fildes, void *buf, size_t nbyte);
^^^^^^^                             ^^^^^^

所以这就是你应该使用的。不是int,不是uint64_t,不是unsigned long long等等。

于 2012-08-28T17:18:10.463 回答