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