Есть ли что-то вроде PHP ob_start для C? - PullRequest
0 голосов
/ 21 марта 2010

У меня есть простой слушатель шлюза, который генерирует журнал на экране вывода через printf Я хотел бы записать его, чтобы вставить его в таблицу mysql.

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

Интересно, есть ли какой-нибудь быстрый способ сделать это - C.

Если есть, могу ли я получить оба выхода одновременно?

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 марта 2010

Я не знаю ни одной функции, которая выполняет буферизацию вывода в 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 голос
/ 21 марта 2010

Предполагая, что под «записью» вы подразумеваете, что хотите записать его в файл, тогда да, это довольно просто. В течение многих лет в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...