通读 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
找到输入文件的大小,并使用它来计算您的传输。套接字端对您来说无关紧要。
唯一会出现问题的情况是您要传输的文件正在增大或缩小。鉴于必须对输入文件进行 mmap 编辑,并且在这些情况下使用 mmap 可能会发生不好的事情(没有一些聪明的代码),您可能不应该在这些情况下使用 sendfile。
关于c - 使用 sendfile(),是否可以判断 in_fd 何时处于 EOF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3697002/