У меня есть небольшая программа, которая открывает файл и выполняет некоторую операцию над ним. Я подписался закрытие файла окончания программы следующим образом:on_exit и CTRL + C
static
void exit_handler (int ev, void *arg)
{
fprintf(stderr, "bye %d\n", WEXITSTATUS(ev));
fclose((FILE *)arg);
}
int main (int argc, char *argv[])
{
FILE *out;
...
out = fopen(argv[1], "wt");
if (out == NULL) {
perror("Opening output file");
exit(EXIT_FAILURE);
}
on_exit(exit_handler, out);
...
}
Попытка выполнить это я заметил, что он работает правильно, только если программа завершается нормально. В случае CTRL + C (SIGINT
) Обратный звонок exit_handler
не выполнен.
Разве это не странно? Должен ли я связать вызов exit(EXIT_FAILURE)
с обработчиком сигнала для SIGTERM
? Какова наилучшая практика в этом случае?
Обратите внимание, что по умолчанию для большинства TTY CTRL + C отправит 'SIGINT' в процесс переднего плана, а не' SIGTERM'. –
@JonathonReinhart правильный. Я исправил это, спасибо. – Dacav