Если вы можете допустить использование временного файла, вы можете перенаправить стандартный вызов freopen()
: -
newstdout = freopen("/tmp/log", "w", stdout);
Это заставит все printf записываться в / tmp / log вместо вывода на консоль. В какой-то удобный момент позже в вашей программе вы можете открыть тот же файл для чтения: -
readfd = fopen("/tmp/log", "r");
и переслать содержимое, которое было добавлено, используя что-то вроде этого: -
void forward_to_elog(void)
{
int bytesread;
char buf[100];
memset(buf,0,100);
do {
memset(buf,0,100);
bytesread = fread(buf, sizeof(buf)-1, 1, readfd);
/* call elog(buf) */ ;
} while(bytesread);
}
Если вы оставите файл открытым, вы можете несколько раз вызвать forward_to_elog()
, чтобы постепенно переслать добавленное содержимое.
Функция tmpnam()
может использоваться для получения имени для временного файла, если вы не хотите статически его кодировать.