是否有类似PHP ob_start的C?

时间:2010-03-21 02:40:22

标签: c

我有一个简单的网关监听器,它通过printf在屏幕输出上生成一个日志。我想记录它,以便我可以将它插入到mysql表中。

printf("\nPacket received!! Decoding...");

我想知道是否有任何快速的方法可以做到这一点。

如果有,我可以同时获得两个输出吗?

谢谢

2 个答案:

答案 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;
}