Я пишу проект оболочки на C, и когда я пытаюсь написать в stderr (при возникновении ошибки), сообщение печатается (stdout), но выходная строка не достигает stderr (сценарий проверяет это, и мы можем предположить, что это работает ).
Вот как устроен мой скрипт
int main(int argc, char * argv) {
...
while(some_expression) {
switch(other_expression) {
...
case k:
raise_error();
break;
...
}
}
}
И raise_error() выглядит так:
void raise_error() {
char error_message[30] = "An error has occurred\n";
write(STDERR_FILENO, error_message, strlen(error_message));
}
Когда я проверяю файл, который должен содержать сообщение об ошибке (сгенерированное тестовым скриптом), он пуст, но сообщение об ошибке появляется в выводе консоли (stdout). Если удалить все внутри main и просто поставить raise_error(), он работает правильно, и в файле stderr появляется сообщение об ошибке. Я также модифицировал функцию raise_error() следующим образом:
void raise_error() {
printf("Raise error method is reached");
char error_message[30] = "An error has occurred\n";
write(STDERR_FILENO, error_message, strlen(error_message));
}
Мой вывод выглядит следующим образом:
An error has occurred
Raise error method is reached
Что я могу делать неправильно?