read a alarm
Jirka Kosina
jikos na jikos.cz
Středa Prosinec 18 13:05:28 CET 2002
On Wed, 18 Dec 2002, sci wrote:
> doufam, ze to neni prilis OT, ale mam tu nejakou potiz se signaly
Myslim, ze je to naprosto on topic ;)
> ve spojeni s funkci read. Ta by se mela prerusit pokud proces dostane
> signal (SIGALRM) a v errno by se mel objevit kod EINTR. Nic takoveho se
> ovsem nestane, i kdyz program na signal reaguje. Zkousel jsem to na SCO
> (nejakem starsim), kde to takto funguje. Muzete mi poradit, co delam
> blbe? Prikladam i src.
Kdyz se teda tak ptate ;) tak delate blbe to, ze pouzivate obsoletni
volani signal() misto sigaction(). U signal() AFAIK nemuzete specifikovat
chovani pri prijeti signalu, a defaultni chovani tusim je, ze pokud to
lze, tak se syscall restartuje.
Naopak pri volani sigaction() muzete v sa_falgs specifikovat ruzne flagy,
ale pro vas ucel je rpedevsim dulezite nemit nastaveny SA_RESTART (vice
man sigaction).
Tedy misto
signal(SIGALRM, CathAlarm);
dejte neco jako
struct sigaction sigact;
sigact.sa_handler = CatchAlarm;
sigact.sa_flags = 0;
sigaction(SIGALRM, &sigact, NULL);
--
JiKos.
Další informace o konferenci Linux