套接字的描述符可以转换为文件指针吗?

时间:2011-10-15 22:09:02

标签: c tcp posix

我以下列方式获得了TCP套接字的描述符:

  

int desc = accept(socket_descriptor, &client_address, &len)

现在从这个描述符desc我想得到一个文件指针。可以fdopen()在这里使用吗?

我想获取文件指针的原因是因为我正在更改将数据写入本地文件的现有代码。现在,我想扩展其功能,以便它可以替代地写入TCP客户端。我不想重写所有功能,并且想要以某种方式使用现有的基础设施。现有函数使用文件指针写入文件。我想知道是否有可能使相同的函数写入TCP流而不进行任何更改。

1 个答案:

答案 0 :(得分:9)

是的,fdopen()正是您所需要的。以下是man page对此的评论:

  

fdopen()函数将流与现有文件相关联   描述符,fd。流的模式(值“r”,“r +”之一,   “w”,“w +”,“a”,“a +”)必须与文件的模式兼容   描述。新流的文件位置指示器设置为   属于fd,错误和文件结束指标   清除。模式“w”或“w +”不会导致文件截断。该   文件描述符不是重复的,并且在流时将被关闭   由fdopen()创建的关闭。将fdopen()应用于a的结果   共享内存对象未定义。

但在应用于套接字描述符时要谨慎使用它。高级I / O函数使用缓冲,并且可以以不同方式发送数据(即,只要在流中找到\n,就插入\r)等进行刷新。