代码之家  ›  专栏  ›  技术社区  ›  Daniel Trebbien

使用sendfile(),是否可以判断in\u fd何时处于EOF?

  •  4
  • Daniel Trebbien  · 技术社区  · 15 年前

    man page of the Linux system call sendfile ,我想知道呼叫程序是否可能知道 in_fd 在EOF。可以推测,返回值为0表示这一点,但这就引出了返回值为0实际上意味着什么的问题。如果 就像 write ,则返回值0表示复制了0个字节。但是,如果 就像 read ,则返回值0表示EOF。必须事先知道要从中复制多少字节吗 在fd中 out_fd 发送文件 ? 什么时候 返回0?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Duck    15 年前

    我不认为有任何直接的方法可以知道这一点,但这并不重要。通常您可以通过 stat/fstat

        2
  •  3
  •   Taylan Karaoglu    14 年前

    可以使用offset参数进行读取计数。

    根据手册页

    count是要在文件描述符之间复制的字节数。

    返回值

        3
  •  0
  •   Giampaolo Rodolà    13 年前

    当发送的字节数为0时,可以假设已达到EOF:

    sent = sendfile(out_fd, in_fd, &offset, nbytes);
    if (sent == 0) {
        // EOF
        ...
    }
    

        4
  •  0
  •   jingchun.zhang    11 年前

    在我的例子中,遇到文件被rsync截断,应用程序同时使用sendfile传输文件。我发现应用程序100%的消耗cpu的情况下,我修复我的代码参考下面的文章,问题消失。 http://www.linuxjournal.com/article/6345

    关键是使用F\u SETLEASE获取应用程序的文件租约。