Это расширение вопроса, который я задавал ранее. Переопределить Ctrl-C
У меня есть этот код, который обрабатывает сигнал для ctrl-c, хотя он работал на одной машине, я запустил его на другой, и теперь он снова выходит из программыпосле нажатия Ctrl-C.
Когда я спросил своего профессора, он сказал мне, что в обработчике мне нужно будет предотвратить дальнейшую обработку сигнала, но я не уверен, как это сделать.
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
#include "Input.h"
#include "CircleBuff.h"
sig_atomic_t sigflag = 0;
void catch_int(int sig_num) {
sigflag = 1;
//printf("to do: Print history");
}
void printHistory(CircleBuff hist) {
cout << "Complete History:\n" << endl;
hist.print();
cout << endl;
}
int main(int argc, char** argv) {
signal(SIGINT, catch_int);
//my code here
do {
//more code here
if (sigflag != 0) {
printHistory(history);
sigflag = 0;
}
} while(report != 0); //which is assigned in the code
Здесьэто сокращенный код:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
sig_atomic_t sigflag = 0;
void catch_int(int sig_num) {
sigflag = 1;
printf("to do: Print history");
}
int main(int argc, char** argv) {
signal(SIGINT, catch_int);
do {
} while(1);
}