Burnn Napisano Styczeń 17, 2006 Zgłoszenie Share Napisano Styczeń 17, 2006 Witam Problem dotyczy obslugi sygnalow, a mianowicie ponizszy program ma za zadanie odebrac SIGQUIT po czym wyswietlic zawartosc zmiennej - sygnaly. Wynik jest przynajmniej dla mnie nieoczekiwany sygnal osblugiwany z tego co wiem powien byc blokowany (przynajmniej przez sigaction), notomiast po wyslaniu wiekszej ilosci sygnalow w trakcie obslugi tego pierwszego zm syganly przyjmuje wartosc 1000000002 (oczekiwalem raczej 1000000001). Jezeli ktos ma jakis pomysl prosze o pomoc. #include <signal.h> #include <stdio.h> static volatile sig_atomic_t sygnaly = 0; void sygnal(int s) { while (sygnaly ++ < 1000000000); } int main() { struct sigaction act; memset(&act, 0, sizeof(struct sigaction)); act.sa_handler = sygnal; if (sigfillset(&act.sa_mask) < 0) { printf("blad\n"); return 1; } sigaction(SIGQUIT, &act, NULL); pause(); printf("przechwycono sygnal wart:%ld\n", (long) sygnaly); sygnaly = 0; pause(); printf("przechwycono sygnal wart:%ld\n", (long) sygnaly); return 0; } Wynik : przechwycono sygnal wart:1000000002 przechwycono sygnal wart:1000000002 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
yegorov Napisano Listopad 9, 2006 Zgłoszenie Share Napisano Listopad 9, 2006 Wynik : przechwycono sygnal wart:1000000002 przechwycono sygnal wart:1000000002 Mój wynik (po wysłaniu z innej konsoli SIGQUIT za pomocą: kill -s SIGQUIT pidprocesu): przechwycono sygnal wart:1000000001 przechwycono sygnal wart:1000000001 Mam gcc 4.1.1, może jest bardziej dopracowany niż Twój kompilator. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się