C然后读取写入

时间:2016-03-03 07:15:40

标签: c io

我们之后:

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的返回值?!

1 个答案:

答案 0 :(得分:2)

read返回实际读取的字节数,记住你可以有500字节长的文件,请求读取500字节,但只返回200。因此,您应始终循环读取,直到返回文件末尾。特别是TCP / IP读取的情况,因为您从缓冲区中拔出。

实际上,如果有足够的内容,您可能总是会从文件中获取请求的字节数,但从技术上讲,这并不总是正确的。

但是,例如,如果你有一个32字节的文件,并且你有一个500字节的缓冲区。您只能读取32个字节,因此其他500个字节将是垃圾。现在,当你编写新文件时,它的长度为500字节,而不是32字节。