Divacky Roman napsal/wrote, On 02/26/07 10:47: >> Driver ulpt nema interfejs pre select(), ktory je pouzivany v CUPS. CUPS
> select() je ... > per-class operace implementovana pro ruzne filesystemy atp. > kdo a co chape blbe? Rekl bych, ze se mylis v tvrzeni "poll() je operace implementovana pro ruzne filesystemy". Ve skutecnosti plati, ze "poll() je operace implementovana pro ruzna zarizeni" - a to uz je skoro totez, co tvrdit, ze poll() (a tedy select) je hw-specific. A to uz je odpoved na tvrzeni: > se mi nezda ze by select() byl nejak hw specific. Tady nekde patrne je koren problemu. Konkretne hardware "tiskarna pres USB" rizena ovladacem "ulpt" nema poll() implementovany a pouziva genericky a prazdny nopoll(). Popravde receni mi neni uplne jasne, jak by mohl byt poll generickou rutinou nezavislou na zarizeni a hardware. Jak chces na neznamem zarizeni obecne zjistit, jestli jsou v nejakem obecnem datovem kanale pripravena data na cteni, kdyz samotny pojem "datovy kanal" neni genericky a zavisi na konkretnim ovladaci (a tedy hardware) ? Jen si ale s odstupem casu prestavam myslet, ze v ulpt je select() implemntovan tak, ze blokuje jak to naznacoval puvodni prispevek. Spis to bude stejne jako v ugen - on neblokuje, naopak, okamzite ohlasi pripravenost deskriptoru - a zablokuje se tedy az nasledne zavolany read(). Spravna implementace neblokujiciho cteni na FreeBSD's ULPT a UGEN - a asi i dalsich USB pouzivajicich genericke USB rutiny - proste nevede pres select, ale pres ioctl USB_SET_TIMEOUT a blokujici read() - on se stejne pozadavek na neblokujici operace s descriptorem tise ignoruje a obsluhuje se jako blokujici. Jednoduse receno - neblokujici operace nejsou pro tato zarizeni k dispozici. Misto nich lze pouzit "blokujici cteni s timeoutem". Dokonce bych mozna odvazne rekl, ze ono to snad obecne ani lepe nejde (cimz nepopiram, ze v konkretnich pripadech to muze byt jinak). Dan -- Dan Lukes SISAL MFF UK AKA: [EMAIL PROTECTED], [EMAIL PROTECTED],[EMAIL PROTECTED] -- FreeBSD mailing list (users-l@freebsd.cz) http://www.freebsd.cz/listserv/listinfo/users-l