将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