c - 如何将 fprintf 输出重定向到 C 套接字?

标签 c sockets printf

如何将 fprintf 输出重定向到套接字?

我正在编辑包含大量 fprintf 调用的源代码。它记录到一个文件。但我想将此日志重定向到套接字。

如何做到这一点?

最佳答案

在类 Unix 系统上,打开套接字(获取文件描述符)。

将套接字映射到stderr

如果您还没有使用过stderr,您可以简单地使用dup2() 使套接字进入输出 channel 。即使您已将一些数据发送到原始 stderr,您也可以这样做。评论中关于使用 fflush() 的建议可能是相关的,尽管 stderr 通常是无缓冲的而不是完全缓冲的(因此通常没有任何要刷新的东西)。

freopen() 函数可用于更改流的输出,例如 stderr(特别是)。嗯,你可以使用 freopen()stderr 映射到 /dev/fd/N,其中 N 是套接字的文件描述符?是的,你可能可以。

将套接字映射到其他流

重新阅读您的问题 - 我没有在其中看到 stderr。所以 fdopen() 函数从文件描述符创建一个流。因此,如果您可以指定日志记录要写入的流,那么您就大功告成了。如果您不能指定它但可以看到它,那么上面的 freopen() 技巧也应该在这里起作用。

关于c - 如何将 fprintf 输出重定向到 C 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776103/

相关文章:

c - iOS:将对象添加为属性监听器时,是否必须在释放对象之前将监听器设置为 "unregister"?

c - 处理具有相同主编号但唯一次编号的多个设备文件

c++ - 如何过滤epoll事件?

java - 文件压缩服务器在不重启的情况下只能压缩一个文件

c - 用for循环编程C打印一维数组

c++ - 如何使用 sprintf 将 uint_64 类型的数组附加到 char 数组?

c - 结构类型数组。在结构内部有指针

c - 在 C 中使用链表实现堆栈时出错

java - 查看套接字输入流

c - 在C中打印二叉树