Мне нужно сделать программу, где процесс бесконечно пишет три точки. При нажатии CTRL+C (используя SIGINT) программа должна написать сообщение на прощание и завершить процесс. При нажатии CTRL+Z и затем fg (используя SIGCONT) программе необходимо измерить время, прошедшее во время это время в секундах и за каждую прошедшую секунду программа должна поставить одну точку. Когда программа записывает все точки из единицы, она возвращается к трем точкам.
$ ./program
...
...
...
...
... <pressing Ctrl+Z>
$ <we wait few seconds (5)>
$ fg
.
.
.
.
.
...
...
...
...
<pressing Ctrl+C>
Ending
$
Мне удалось пройти первую часть (убить процесс с помощью CTRL+C в бесконечном цикле), но я не могу найти способ измерить время после остановки процесс с CTRL+Z, а затем продолжите с fg.
Текущий рабочий код:
bool stop = true;
void end(int sig){
printf("ending\n");
//signal(SIGINT, SIG_DFL);
//kill(getpid(), SIGINT);
stop = false;
}
int main(){
struct sigaction act;
act.sa_handler = end;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, 0);
while(stop) {
printf("...\n");
sleep(1);
}
return 0;
}
Как я планирую измерять время:
t = clock();
pause();
t = clock() - t;
double time = ((double)t)/CLOCKS_PER_SEC;
printf("time: %f", time);