通读 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/

10-10 03:05