C 将套接字复制到文件

C 将套接字复制到文件,c,linux,sockets,dup,C,Linux,Sockets,Dup,总之,冬天来了,请保持温暖和健康。 在对这项工作的沉思中,我得到了一些关于fd dup2功能的问题 . 我创建了一个套接字服务器和一个客户端。服务器发送数据,客户端接收数据。 但现在我想将服务器套接字fd复制到文件df,以便让客户机直接从服务器中的文件读取数据。 我写得像 while(socketdf = accept(...)) { dup2(filefd , socketfd); } 而(socketdf=accept(…) { dup2(filefd,socketfd); } 但是,它不

总之,冬天来了,请保持温暖和健康。 在对这项工作的沉思中,我得到了一些关于fd dup2功能的问题 . 我创建了一个套接字服务器和一个客户端。服务器发送数据,客户端接收数据。 但现在我想将服务器套接字fd复制到文件df,以便让客户机直接从服务器中的文件读取数据。 我写得像

while(socketdf = accept(...)) { dup2(filefd , socketfd); } 而(socketdf=accept(…) { dup2(filefd,socketfd); } 但是,它不起作用 这可能吗? 你能给我一些建议吗? Thanx

dup2()
不是这样工作的--您在这里要做的就是关闭
socketfd
,并将其替换为
filefd
的副本


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

抱歉,
sendfile(2)
仅在
in_fd
参数支持
mmap(2)
类操作时工作——不允许使用套接字。Hrm,我用另一种方式解释了这个问题——我认为他想让服务器将数据存储到一个文件中,以便在以后向客户机提供数据。(顺便说一下,酷狗graviwhatsit。)我看到的关键措辞是“让客户端直接从服务器中的文件读取数据”。这一部分似乎很明确。哈哈哈,令人惊讶,我们都认为我们有明确的解释,这是极为对立的。我当然希望你是对的,如果你是对的,对他来说会容易得多。:)请注意,POSIX.1-2001或其他标准中未规定
sendfile(2)
。其他UNIX系统使用不同的语义和原型实现sendfile()。它不应用于便携式程序。根据手册页。您好,如果它是共享内存fd,而不是文件fd怎么办?