通读 man page of the Linux system call sendfile
,我想知道调用程序是否有可能知道 in_fd
何时处于 EOF。据推测,这可以通过返回值 0 来表示,但这导致了返回值 0 实际意味着什么的问题。如果 sendfile
类似于 write
,则返回值 0 仅意味着复制了 0 个字节。但是,如果 sendfile
类似于 read
,那么返回值 0 将意味着 EOF。必须事先知道要从 in_fd
复制多少字节到 out_fd
才能使用 sendfile
吗? sendfile
返回 0 是什么意思?
最佳答案
我认为没有任何直接的方法可以知道这一点,但这并不重要。通常你会通过 stat/fstat
找到输入文件的大小,并用它来计算你的传输。 socket 端对你来说无关紧要。
这应该是有问题的唯一情况是,如果您想传输正在增长或缩小的文件。鉴于输入文件必须经过 mmap 处理,并且在这些情况下使用 mmap 可能会发生不好的事情(没有一些聪明的代码),您可能不应该在这些情况下使用 sendfile。
关于c - 使用sendfile(),是否可以判断in_fd 何时处于EOF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3697002/