c - 使用 sendfile(),是否可以判断 in_fd 何时处于 EOF?

标签 c linux eof sendfile zero-copy

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

相关文章:

linux - 如何使用 grep 提取 UID 信息?

python - 解析 Python 中的语法错误时出现意外的 EOF

c - 仅通过 EOF 结束 while 循环一次

c++ - Eclipse 中类的多重定义错误

c - 为什么 fread 循环需要额外的 Ctrl+D 来用 glibc 发出 EOF 信号?

java - JNI : "receipe for target ' HelloJNI. h' 在使用 'makefile' 时失败

将字符串用户输入转换为 double

c - preLaunchTask 'helloworld' 以退出代码 1 终止

c - 数据保存和数据读取(C编程)

可执行文件能否发现自己的路径? (Linux)