как читать stderr в char [] в с - PullRequest
       30

как читать stderr в char [] в с

1 голос
/ 04 декабря 2010

У меня есть код для проверки STDERR с 'Обнаружен защищенный поток DRM':

const static char* DRM_TOKEN = "DRM protected stream detected";

const char* source = argv[1];
char tempfile[80];
memset(tempfile, 0, 80);
snprintf(tempfile, 80, "stderr_%lld.log", av_gettime());
freopen(tempfile, "w", stderr);

fflush(stderr);
FILE *fp = fopen(tempfile, "r");
if(fp)
{
    char STDERR[256];
    while(!feof(fp))
    {
    memset(STDERR, 0, sizeof(char) * 256);
    fgets(STDERR, 256, fp);
    if(strstr(STDERR, DRM_TOKEN) != NULL)
    {
        drm = 1;
        break ;
    }
    }
    fclose(fp);
}

Это работает, но я хочу знать любой прямой способ чтения STDERR в char []. PS. мой код будет работать в Linux или MacOS.

1 Ответ

1 голос
/ 04 декабря 2010

stderr был вновь открыт в режиме "w", который доступен только для записи. Судя по вашей функции av_gettime, похоже, что вы используете libavcodec / libavutil, поэтому вместо того, чтобы писать отвратительные хаки, подобные этой, чтобы получать сообщения об ошибках, вы должны прочитать в системе av_log и зарегистрировать собственная функция ведения журнала для переопределения поведения по умолчанию при записи диагностических сообщений в stderr.

...