Я написал программу на C, которая отправляет сообщения на стандартный вывод с помощью printf, и у меня возникли проблемы с перенаправлением вывода в файл (запускаемый из bash).
Я пробовал:
./program argument >> program.out
./program argument > program.out
./program >> program.out argument
./program > program.out argument
В каждом случае создается файл program.out, но он остается пустым. После завершения выполнения размер файла равен 0.
Если я опускаю перенаправление при выполнении программы:
./program argument
Затем все сообщения, отправленные на стандартный вывод с помощью printf, отображаются в терминале.
У меня есть другие программы на C, для которых я без проблем перенаправляю вывод таким образом. Это связано с самой программой? с передачей аргумента? Где искать проблему?
Некоторые подробности о программе C:
- Он ничего не читает со стандартного ввода
- Он использует сокеты BSD Internet Domain.
- Он использует потоки POSIX
- Он назначает специальную функцию обработчика для сигнала SIGINT, используя sigaction.
- Он отправляет много новых строк на стандартный вывод (для тех из вас, кто думает, что я должен сбросить)
Некоторый код:
int main(int argc, char** argv)
{
printf("Execution started\n");
do
{
/* lots of printf here */
} while (1);
/* Code never reached */
pthread_exit(EXIT_SUCCESS);
}