Odchyceni signalu

Petr Novotny Petr.Novotny na antek.cz
Pondělí Říjen 2 17:28:16 CEST 2000


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2 Oct 2000, at 14:30, Cejka Rudolf wrote:

> Petr Novotny <Petr.Novotny na antek.cz> wrote:
> >> netusi tu nekdo, jak odchytit v aplikaci signal, ktery ji nekdo
> >> poslal (v C) ? Napr. SIGPIPE ? Zaboha to nemuzu najit :(((
> 
> > Pro zacatek zkuste manpages signal(2), signal(7). Dal se muzete
> > podivat treba na sigaction(2) a jemu podobne.
> 
> Prave naopak: Pro zacatek zkuste sigaction() a u tohoto interface take
> skoncete. Na signal() se mozna podivejte pro zajimavost, ale zasadne
> tuto funkci nepouzivejte, protoze neni prenositelna.

Byl byste tak hodny a tuto myslenku dale rozvedl? Cemu rikate 
"neni prenositelna"? On signal(2) je i na pre-POSIX systemech, na 
nichz sigaction(2) jeste neni.

Jestli myslite trivialni komplikaci s tim, ze SysV-ish signal(2) je 
jednorazove nastaveni, ktere se vyvolanim handleru prenastavi na 
puvodni, zatimco BSD-ish signal(2) nastaveni handleru uchovava, 
pak to je *skutecne* trivialni komplikace - tu vydavat za prekazku 
prenositelnosti je *velmi* odvazne.

> Bohuzel spravna prace se signaly je velmi obtizna. Pokud ma program po
> obsluze pokracovat v cinnosti, nesmi se zapominat na reentrantnost
> funkci (tj. uvedeny priklad byl myslim spatne uz jen vuci volani
> printf()),

Dobre, mate pravdu. Mel to byt jen jednoduchy priklad. :-) Opravit 
jej na write(1,"handling SIGPIPE") snad zvladne i dite :-)

Ovsem odvolavat se na jedne strane na "prenositelnost" a na druhe 
strane na "reentrantnost funkci v libc" je dosti odvazne :-) (Chci rict, 
ze to, ktere funkce jsou v libc reentrantni, je obtizne prenositelne.)

> na prichod signalu ve spatnou dobu, na vicenasobny vyskyt
> signalu atd. Proto je potreba nejdrive venovat hodne casu studiu - bud
> precist manualove stranky (nejlepe na nekolika OS a musite _vsechno_
> pochopit), nebo precist nejakou moc dobrou knihu, nebo si popovidat s
> nekym zkusenejsim, ale stejne bych mu neveril.

Za predpokladu, ze pisete mission-critical aplikaci, ktera musi se 
signaly pracovat, a nemate se signaly zadne zkusenosti, pak 
urcite. :-) Na jednoduchem odchyceni SIGPIPE v presne 
definovanych pripadech (tj. staram se o tom, zda me pajpy nejsou 
broken; kdyz je muj stdout broken, at se treba sesypu) neni zadna 
veda.


Jinak doporucuji procist si DJB knihovnu pro praci se signaly. 
Pochopite z ni i to, co jste nikdy vedet nechtel - a multiplatformni 
zaber je obrovsky (vcetne obchazeni bugu v nekterych systemech).


-----BEGIN PGP SIGNATURE-----
Version: PGP 6.5.2 -- QDPGP 2.61a
Comment: http://community.wow.net/grt/qdpgp.html

iQA/AwUBOdibgFMwP8g7qbw/EQIm3wCfaergMU7qyR86aPKNoz+vv4srylQAn3Om
/5GVQIxl0+QlxP2vVNHW6r5G
=ixSA
-----END PGP SIGNATURE-----
--
Petr Novotny, ANTEK CS
Petr.Novotny na antek.cz
http://www.antek.cz
PGP key ID: 0x3BA9BC3F
-- Don't you know there ain't no devil there's just God when he's drunk.
                                                             [Tom Waits]


Další informace o konferenci Linux