如何在c中将stderr读入char []

时间:2010-12-04 14:16:57

标签: c stderr

我有代码检查STDERR并检测到'DRM protected stream':

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 个答案:

答案 0 :(得分:1)

stderr"w"模式重新打开,该模式为只写。从您的av_gettime函数来看,看起来您正在使用libavcodec / libavutil,因此您应该阅读av_log / stderr,而不是编写这样的可怕黑客来获取错误消息{1}}系统并注册您自己的日志记录功能,以覆盖将诊断消息写入{{1}}的默认行为。