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

Ank*_*rVj 7 c posix tcp

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

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

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

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

小智 9

是的,fdopen()正是您所需要的.以下是手册页的内容:

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

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

  • @AnkurVj:你为什么不尝试一下?如果文本和二进制文件的处理方式不同(即在Windows上),我建议以"w +"或"bw +"开头. (2认同)