我们之后:
int readStat = read(fd, buf, sizeof(buf));
为什么以下是:
int status = write(socket_num, buf, readStat);
而不是
int status = write(socket_num, buf, sizeof(buf));
? 因此,不是传递buf的大小,就像man page指示的那样,为什么我们传入read的返回值?!
答案 0 :(得分:2)
read返回实际读取的字节数,记住你可以有500字节长的文件,请求读取500字节,但只返回200。因此,您应始终循环读取,直到返回文件末尾。特别是TCP / IP读取的情况,因为您从缓冲区中拔出。
实际上,如果有足够的内容,您可能总是会从文件中获取请求的字节数,但从技术上讲,这并不总是正确的。
但是,例如,如果你有一个32字节的文件,并且你有一个500字节的缓冲区。您只能读取32个字节,因此其他500个字节将是垃圾。现在,当你编写新文件时,它的长度为500字节,而不是32字节。