restartable syscalls nechci!
Dan Lukes
dan at obluda.cz
Wed Jan 14 18:36:08 CET 2004
Radim Kolar wrote:
> vypada to, ze funkce standardni C library read() nevrati -1 pokud obdrzi
> return code restart zpusobeny signalem alarm a zavola read znova, asi
> aby si to programator usnadnil.
>
> 6398 webbench 0.256261 CALL read(0x5,0xbfbfe530,0x5dc)
> 6398 webbench 2.213878 RET read RESTART
> 6398 webbench 2.213974 PSIG SIGALRM caught handler=0x8048d78 mask=0x0 code=0x
> 0
> 6398 webbench 2.214087 CALL sigreturn(0xbfbfe210)
> 6398 webbench 2.214110 RET sigreturn JUSTRETURN
> 6398 webbench 2.214215 CALL read(0x5,0xbfbfe530,0x5dc)
>
> da se to nejak v te knihovne vypnout? V linuxu to beha okay a oba dva systemy
> se chlubi v man page, ze jsou posix compatibilni.
Netvrdim, ze mam POSIX v hlave, ale mam dojem, ze POSIX pripousti obe
chovani (respektive tri - volani muze skoncit EINTR, muze vratit mensi
nez pozadovane mnozstvi dat nebo muze byt volani restartovano) - pricemz
vyber je nedefinovany a tedy zcel aponechany na implementaci. Mohu si
to, pochopitelne, pamatovat spatne.
Podle meho se pokousite vyuzit nestandardizovanych vlastnosti systemu -
a tak neprekvapi, ze se to na ruznych strojich chova ruzne.
Pokud potrebujete implementovat "cteni s timeoutem" pak pouzijte select
(ktery timeout ma) nasledovany ctenim.
Tato kombinace je standardizovana dostatecne ...
Zkuste si mozna precist manualovou stranku od sigvec nebo sigaction -
je tu urcita moznost ovlivnit toto chovani nad ramec POSIX a
"zlinuxoidnit ho". Ale pak vam to stejne nebude zase chodit jinde (i
kdyz jinde bude taky POSIX system) - takze kdyz pisete neco, co poustite
na vice systemech, je lepsi se tech doporuceni drzet konzervativne ...
Dan
More information about the Users-l
mailing list