【问题标题】:dup2 a socket to a filedup2 到文件的套接字
【发布时间】:2011-11-11 04:54:25
【问题描述】:

大家,冬天来了,请注意保暖,保持健康。 在思考工作的过程中,我得到了一些关于 fd dup2 功能的问题 . 我创建了一个套接字服务器和一个客户端。服务器发送,客户端接收数据。 但是现在我想将服务器套接字 fd 复制到文件 df 中,以便让客户端直接从位于服务器中的文件中读取数据。 我喜欢写

而(socketdf = 接受(...)) { dup2(filefd, socketfd); }

但是,它不起作用 这可能吗? 你能给我什么建议吗? 谢谢

【问题讨论】:

  • 嗨,如果它是共享内存 fd,而不是文件 fd,会怎样?

标签: c linux sockets dup


【解决方案1】:

dup2() 不是这样工作的——你在这里最终要做的是关闭socketfd 并用filefd 的副本替换它。

没有办法像您在这里尝试做的那样直接将套接字插入文件——您需要将数据从文件“泵”到应用程序中的套接字。不过,sendfile() 系统调用将大大简化事情。

【讨论】:

  • 抱歉,sendfile(2) 仅在in_fd 参数支持mmap(2) 类操作时有效——不允许使用套接字。
  • Hrm,我反过来解释了这个问题——我认为他想让服务器将数据存储到一个文件中,以便他以后可以提供给客户端。 (顺便说一句,很酷的狗 graviwhatsit。)
  • 我看到的关键用语是“让客户端直接从位于服务器的文件中读取数据”。这部分似乎很明确。
  • 哈哈哈,太棒了,我们都认为我们有明确的相反的解释。我当然希望你是对的,如果你是对的,他会容易得多。 :)
  • 请注意,根据手册页,sendfile(2)Not specified in POSIX.1-2001, or other standards. Other UNIX systems implement sendfile() with different semantics and prototypes. It should not be used in portable programs.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多