Цель: записать This line must be printed
в файл журнала mib_log_test
в случае зависания / зависания программы по какой-то странной причине.
Для простоты написал программу на C следующим образом:
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "./mib_log_test"
FILE *fp = NULL;
int main()
{
fp = fopen(FILE_NAME, "w+");
if (fp == NULL) {
fprintf(stderr, "Unable to open %s file", FILE_NAME);
exit(EXIT_FAILURE);
}
fprintf(fp, "This line must be printed\n");
while(1);
return 0;
}
После компиляции и запуска вышеуказанной программы она никогда не прекратит себя из-за бесконечного цикла. Поэтому я должен нажать ctrl + c
, чтобы прекратить его. с ctrl + c
я не вижу, This line must be printed
записывается в мой лог-файл (mib_log_test
)
И если я переопределю обработчик SIGINT по умолчанию, как показано ниже, This line must be printed
записывается в мой лог-файл (mib_log_test
).
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#define FILE_NAME "./mib_log_test"
FILE *fp = NULL;
void sigint_handler(int sig_num)
{
exit(EXIT_FAILURE);
}
int main()
{
fp = fopen(FILE_NAME, "w+");
if (fp == NULL) {
fprintf(stderr, "Unable to open %s file", FILE_NAME);
exit(EXIT_FAILURE);
}
signal(SIGINT, sigint_handler);
fprintf(fp, "This line must be printed\n");
while(1);
return 0;
}
Вопрос : Что делает обработчик SIGINT по умолчанию, который приводит к тому, что в вышеописанном случае сообщения не записываются?