我有一个简单的网关监听器,它通过printf在屏幕输出上生成一个日志。我想记录它,以便我可以将它插入到mysql表中。
printf("\nPacket received!! Decoding...");
我想知道是否有任何快速的方法可以做到这一点。
如果有,我可以同时获得两个输出吗?
谢谢
答案 0 :(得分:2)
我不知道任何在C中输出缓冲的函数。但你可以很容易地模拟一个:
char buffer[MAX_BUFFER_SIZE] = ""; // that buffers your output.
char temp[SOME_SUITABLE_MAX];
现在每次使用printf
时,请使用sprintf
,如下所示:
sprintf(temp,"\nPacket received!! Decoding...");
并将它们附加到缓冲区
strcat(buffer,temp);
为每个要缓冲的消息继续执行sprintf
后跟strcat
,一旦完成缓冲区将具有缓冲输出。
答案 1 :(得分:1)
假设通过“记录它”表示你想将它写入文件,那么是的,这很容易。 Unix已经有一个tee
实用程序多年,可以让你做类似的事情:
gateway_listener | tee record_file
如果您在默认情况下未提供tee
的系统上运行,则应该很容易找到或编译一个:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
FILE *outfile;
int c;
if ( argc < 2) {
fprintf(stderr, "Usage: tee <out_file>\n");
return EXIT_FAILURE;
}
if (NULL == (outfile = fopen(argv[1], "w"))) {
fprintf(stderr, "Unable to open '%s'\n", argv[1]);
return EXIT_FAILURE;
}
while (EOF != (c=getchar())) {
putc(c, outfile);
putchar(c);
}
fclose(outfile);
return 0;
}