On Mon, Feb 26, 2007 at 11:27:06AM +0100, Dan Lukes wrote: > 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: nedival jsem se na poll() (ale predpokladam ze to bude fungovat uplne stejne)
select() vola kern_select() ktery vola selscan() ktery vola fo_poll(), coz je operace definovana v struct fileops{} coz je fs-specific kde delam chybu? navic si nemyslim, ze by bylo nutne aby hw nejak sdeloval pollu ze ma pripraveny data. proc by to nemohlo fungovat tak ze hw nacte data, "nejak" ( interrupt thread, PIO, jakkoliv) je supne do bufferu ktery je genericky pro VFS a poll() operuje nad checkovanim tech bufferu ve VFS? jsou tam mensi implementacni detaily jakoze poll nad socketama musi delat principielne neco kapanek jineho nez poll nad lokalnim souborem. ale podstatou je ze to operuje nad generickou vrstvou a ne nad hw driverem. pokud v tedle analyze mam chybu tak ocenim kdyz mi dane napises kde, dik :) > > 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(). no... nemuze todle byt rozdil mezi poll() a select(), ze poll() je fakt per character device a select() je jak popisuju vyse obecny? pac je fakt ze cdevsw obsahuje pointer na poll rutinu. neni mi ale jasne proc by se to takhle melo lisit. > 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) ? viz vyse > 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(). ja si myslim ze ten select() funguje obecne na VFS vrstve zatimco ten poll() je fakt character device specific. netusim proc to tak je ale rekl bych ze je to fakt ;( kazdoapdne. pokud CUPS pouziva select() tak to nevysvetluje proc by chybejici poll() mel vadit -- FreeBSD mailing list (users-l@freebsd.cz) http://www.freebsd.cz/listserv/listinfo/users-l