2012-03-09 1 views
1

Я пишу строку в stderr fprintf (strderr, format strimg, string) и позже из другой функции Мне нужно проверить, было ли что-либо записано в stderr.Проверьте, нет ли stderr пуста

В этом отношении, нормально ли проверять, нет ли stderr? Или, может быть, ferror (stderr) сделает трюк?

+1

AFAIK вы не можете проверить, если STDERR было написано в любом портативном способом. Не могли бы вы просто вывести вывод в stderr в отдельную функцию и задать логическое значение, если оно когда-либо вызвано? –

ответ

1

Возможно, лучше использовать булевский флаг для отслеживания того, была ли задана ошибка или нет - инициализируйте его значением false и установите значение true в любое время, когда вы пишете stderr. Затем убедитесь, что ...

0

посмотреть на this

в комментариях, есть кое-что о EOF тоже. может быть именно то, что вы ищете?

+1

Это отлично подходит для входных файлов, которые не очень полезны для вывода. – JeremyP

0

Если у вас есть шанс, сделать

#include <stdio.h> 
#include <stdarg.h> 
char errprintf_called = 0; 
int errprintf(const char * fmt, ...) 
{ 
    errprintf_called = 1; 
    va_list ap; 
    va_start(ap, fmt); 
    int ret = vfprintf(stderr, ap); 
    va_end(ap); 
    return ret; 
} 

и использовать

errprintf("Error %d has occured!", 42); 
if (errprintf_called) { 
    whine(); 
} else { 
    laugh(); 
}