Вашему вниманию несчастное универское задание:---
# Составить программу, которая заданное число раз (для определенности 5) через определенный временной интервал (5 сек.) повторяет на экране запрос, ожидающий стандартный ввод. Процесс должен завершаться в случае корректного ответа на запрос или после исчерпывания заданного числа запросов. При написании программы рекомендуется использовать средства обработки сигнала от таймера и средства нелокального перехода.
Рекомендуется использовать системные вызовы alarm, signal, read и функции setjmp и localjmp.
---
И вот приблизительное решение, которое напрашивается. по идее должно бесконечно задавать вопрос, делая перерывы по 5 сек:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <setjmp.h>
#include <string.h>
jmp_buf jmp;
void pauser(int sig){
printf("no time no time...\n");
sleep(5);
longjmp(jmp,2);
}
int main(){
char buf[128];
const char ask[] = "Ioann IV sobriquet?\n";
const char ans[] = "Grozniy\n";
setjmp(jmp);
signal(SIGALRM, pauser);
alarm(5);
do{
write(1, ask, strlen(ask));
read(0,buf,128);
}while(strcmp(ans, buf)!=0);
exit(1);
}
Но вот незадача, первый раз аларм сработал, снова выводится предложение ответить на вопрос и все, тишина) setjmp и alarm не дружат?
Типа:
Ioann IV sobriquet?_
no time no time...
Ioann IV sobriquet?_