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