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