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