Mam ten kod i muszę wielokrotnie blokować program, czekając na sygnał. Mój nauczyciel chce, żebyśmy używali sigsuspend i masek zamiast wstrzymywać lub spać. Nie jestem zaznajomiony z sigsuspendą lub maską, wiem że sigsuspend() tymczasowo zastępuje maskę sygnału procesu wywołującego maską podaną przez maskę, a następnie zawiesza proces aż do dostarczenia sygnału, którego akcja ma wywołać obsługę sygnału lub zakończyć proces. Ale jak mogę to zaimplementować.Jak używać sigsuspend
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
unsigned Conta = 0;
void mypause(int sign)
{
switch (sign)
{
case SIGINT:
printf("You've pressed ctrl-C\n");
printf("I'm running waiting for a signal...\n");
Conta++;
break;
case SIGQUIT:
printf("You've pressd ctrl-\\n");
printf("Number of times you've pressed CTRL-C: %d", Conta);
exit(0);
break;
}
}
int main()
{
alarm(3);
printf("I'm Alive\n");
signal(SIGINT, mypause);
signal(SIGQUIT, mypause);
printf("I'm running, waiting for a signal...\n");
while (1)
{
}
return (0);
}
Ukrywasz SIGINT i SIGQUIT, a następnie wywołujesz sigpause z maską, która pozwala na ponowne odczytanie tych dwóch sygnałów. Kiedy sigpause wraca, sygnały są ponownie maskowane. Pozwala to na bezpieczne sprawdzanie zmiennych statycznych. –