将fprintf输出重定向到端口

我曾在Java中工作过,我知道基本的C.将fprintf输出重定向到端口

我必须调试不是由我写的代码。在我的Java项目中,我一直在使用log4j的具有以下配置:

log4j.rootCategory=INFO, A1, socket 

log4j.appender.socket=org.apache.log4j.net.SocketAppender

log4j.appender.socket.remoteHost=localhost

log4j.appender.socket.port=4445

log4j.appender.socket.locationInfo=true

log4j.appender.A1=org.apache.log4j.ConsoleAppender

后,我使用NetBeans中的beanmill插件读取日志,以便知道日志的由来。可以在日志输出中搜索源代码中的字符串,但这需要时间,我必须为大量语句执行此操作。 Beanmill使它像点击记录的线一样简单。

现在我必须使用一些使用大量fprintf语句的C代码。

任何想法如何通过将fprintf输出重定向到端口4445来实现我使用log4j和beanmill所做的操作?

我在Windows XP中使用MinGW和NetBeans 7.3。

回答:

在你刚才提到的代码片段中,你基本上是在写一个套接字这就是localhost:4445

您不需要将fprintf重定向到端口。您需要使用fprintf来实现套接字通信

插座不是文件句柄,所以你不能在这种情况下使用fprintf。您可以使用fprintfsock,这是专门为插座工作而设计的。在Windows上,你可以这样做:

#define fprintf(a,b,...) fprintfsock(a,b,__VA_ARGS__) 

void fprintfsock(SOCKET s, const char* f, ...)

{

va_list a;

va_start(a, f);

int l = vsnprintf(0, 0, f, a);

char* buf = (char*) malloc(l + 1);

va_start(a, f);

vsnprintf(buf, l, f, a);

send(s, buf, l, 0);

free(buf);

}

以上是 将fprintf输出重定向到端口 的全部内容, 来源链接: utcz.com/qa/261341.html

回到顶部