Guarantee business interface. stickfish.com
abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz 64bit.eu 64bit.eu abcprace.cz AbcPráce.cz Raydesk Raydesk
Sledujte AbcLinuxu.cz na:
facebook favicon logo  Facebooku twitter favicon logo  Twitteru,   identi.ca favicon logo  Identi.ca,   rss logo  RSS
Rozšířené hledání
×
včera 22:04 | Upozornění
Firma Valve, tvůrce online herní platformy Steam, hledá vývojáře pro portování her z Windows na Linux. Nedávno sice Valve dementovala zvěsti o chystaném linuxovém klientu Steam, ale třeba se blýská na lepší časy.
Robert Krátký | Komentářů: 9
včera 21:50 | Zajímavý software
Tvůrci Open-Xchange, open source groupwarového softwaru, oznámili, že vyvinuli migrační nástroj pro převod dat z Microsoft Outlooku na Open-Xchange. Nástroj podporuje přesun e-mailů, kontaktů, událostí a úkolů na Open-Xchange Server. Mohou jej použít jak individuální uživatelé, kteří používali Outlook jako samostatný poštovní klient, tak ti, kdo ho používali v kombinaci s Exchange Serverem.
Robert Krátký | Komentářů: 0
včera 21:40 | IT novinky
IBM představila dosud nejrychlejší mikroprocesor: 5,2 GHz a stojí tisíce dolarů. Jmenuje se z196 a bude dodáván s mainframy řady Z. z196 obsahuje 1,4 miliard tranzistorů na čipu, který měří 512 čtverečních milimetrů a je vyroben 45nm technologií. Na trh se dostane během září.
Robert Krátký | Komentářů: 5
včera 16:24 | Pozvánky
Konference LinuxAlt se koná o víkendu 6. a 7. listopadu 2010 na půdě FIT VUT v Brně — Králově poli. Pořádá ji společnost Red Hat, FIT VUT a Liberix, o.p.s., a hlavním tématem jsou opět open-source software a otevřené technologie. … více »
Vlastimil Ott | Komentářů: 0
včera 09:57 | IT novinky
Firma Archos oznámila pětici nových tabletů s Androidem 2.2 (Froyo). Zařízení budou od kapesní velikosti (displej 2,8", 3,2" a 4,3") až po iPadovsky velké tablety (displej 7" a 10,1"). Malé verze budou v prodeji již z září, ostatní přijdou během podzimu. Nejmenší a nejlevnější bude stát 99 USD, největší a nejdražší bude za 349 USD.
Robert Krátký | Komentářů: 6
včera 09:49 | Zajímavý článek
Čím se bude odlišovat Mozilla Firefox 4 od verze 3.x? Ubuntu.ka připravil přehled nových funkcí Firefoxu 4 včetně screenshotů srovnávajících příslušné vlastnosti ve verzích 3 a 4.
Robert Krátký | Komentářů: 14
včera 09:43 | Zajímavý software
Ruská firma Unigine připravuje nativní linuxovoou real-time strategickou hru OilRush. Cílem hry bude rozšiřovat, bránit a dobývat vrtné plošiny v moři. Hra používá engine Unigine a renderovat bude pomocí OpenGL 3.x/4.x. K dispozici je docela působivá video ukázka. Informuje Phoronix.
Robert Krátký | Komentářů: 11
včera 09:20 | Zajímavý software
KSplice, kód, který umožňuje patchování jádra za běhu (bez restartu), bude k dispozici pro uživatele Fedory zadarmo (kromě toho existuje placená 'enterprise' verze). Mimo Fedory je bezplatná verze k mání i pro Ubuntu.
Robert Krátký | Komentářů: 6
1.9. 19:47 | Zajímavý software
Firma Fotolab (sběrny Fotolab a FotoStar) vydala své programy pro objednávání tisku digitálních fotografií, fotoknih apod. i ve verzích pro Linux. Ze stránek si můžete stáhnout archiv s perlovským skriptem, který po odsouhlasení EULA dostahuje potřebné aplikační soubory.
Robert Krátký | Komentářů: 21
1.9. 18:47 | Humor
Koncem srpna byl Microsoftu schválen patent na vypínání operačního systému. Patent má výstižný název "Operating system shut down" a ve výtažku se mimo jiné píše: "Uživatelské rozhraní a schéma poskytnuté pro umožnění vypnutí operačního systému". Vypnutí operačního systému prostě není žádná legrace. Patent uvádí pět "vynálezců". … více »
Robert Krátký | Komentářů: 94
Používáte domácí účetnictví?
 (5%)
 (6%)
 (9%)
 (80%)
Celkem 586 hlasů
 Komentářů: 26, poslední 1.9. 19:15
IBM Smartplanet logo Pojďte s námi budovat chytřejší planetu
    Rozcestník
    Doporučujeme

    Dotaz: Nalezení CD-ROM mechanik

    Jardík avatar 5.2. 03:10 Jardík | skóre: 37 | blog: jarda_bloguje
    Nalezení CD-ROM mechanik
    Přečteno: 644×
    Potřeboval bych najít všechny CD-ROM mechaniky v systému. Zatím to dělám tak, že prohledávám adresář /dev, vybírám zařízení s názvy sg<číslo>, otevřu a přes ioctl pošlu SCSI_INQUIRY a pak testuju vrácená inquiry data, byte 1, bity 0-5 na hodnotu 0x05.

    Jenže prohledávání /dev adresáře je docela pomalé, dochází tam k neustálému kopírování řetězců, a tak hledám nějaký lepší způsob.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*

    Řešení dotazu:


    Odpovědi

    5.2. 08:05 ondrej
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Na debianu by ti mohl pomoct soubor /proc/sys/dev/cdrom/info
    5.2. 08:13 ondrej
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    prip /proc/diskstats

    pokud pouzivas jine distro tak find /proc -name '*cd*'
    Jardík avatar 5.2. 11:24 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Nebudu kvůli tomu pouštět externí program. Zapomněl jsem to zmínit, ale pracuji v C/C++.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    5.2. 15:37 ondrej.k | skóre: 9
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    externi program ale spoustet vubec nemusis, find jsem uvedl jen pro pripad ze by u tebe byly cesty rozdilne, projdi si adresare /proc a /sys ...
    5.2. 09:03 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    To je zly postup. sg zariadenia tam vobec nemusia byt. Posielat nejake prikazy zariadeniam "len tak" tiez nie je vporiadku.

    Skor by som pouzil /sys. Napr. /sys/block - v kazdom zariadeni pozriet, kam vediet symlink device/driver - (sr alebo ide-cdrom, mozno aj nieco ine).
    Jardík avatar 5.2. 11:23 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jenže když se na to budu dívat takhle, tak tam nemusí být ani /sys/. Navíc s tím zařízením potom potřebuju dál něco dělat (posílat další SCSI příkazy) a tak ho nějak potřebuju otevřít. A nějak nejsem zastánce fixně velikých bufferů a jednorázového čtení celého souboru a spoléhat se na to, že se tam data vejdou (ze /sys/ a /proc/ jinak soubory snad číst nejdou). Nějaké systémové volání k tomu není, abych se vyhnul souborům úplně?
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    5.2. 12:49 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ze chces jednemu zariadeniu posielat nejake prikazy, to nijako neospravedlnuje posielanie nejakych prikazov kazdemu zariadeniu.

    V tom /sys nemusis citat ziadny subor. Staci ti readdir() a readlink().
    5.2. 12:51 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    A pripadne sa pozri na libsysfs.
    Jardík avatar 5.2. 16:27 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ale já posílám příkazy jen zařízením sgXXX, což by měli být SCSI zařízení a každé SCSI zařízení musí INQUIRY příkaz podporovat. Ano, je tu moňost, že by tam mohlo být ne-SCSI zařízení, pokud si ho někdo takto pojmenuje.

    readdir() neustále kopíruje název souboru do bufferu v dirent struktuře, navíc do fixního (256B), readlink vyžaduje fixní velikost bufferu a realokovat 10x buffer, pokud bude cílová cesta dlouhá je taky opruz.

    libsysfs stejně čte /sys, cesta je tam hardcodována (jde sice přepsat proměnnou prostředí) a to už rovnou můžu hardcodovat /dev/sgXXX. To není jediné systémové volání na zjištění připojených zařízení?
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    5.2. 21:50 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Zariadenia sg sa vytvaraju aj pre USB mass storage - a pozri sa do jadra, kolko je tam workaroundov ohladne INQUIRY pri tychto zariadeniach.

    Co sa stane, ak zariadenie prave vykonava nejaky prikaz a ty mu do toho nieco posles? Preco by mal nejaky program posielat prikazy vsetkym zariadeniam? Pripomina mi to programovanie ako vo Windows.

    Inak ty mas nejaku uchylku na zbytocnu mikrooptimalizaciu? Kolkokrat stihne procesor nakopirovat tie retazce, kym ti nejake SCSI zariadenie odpovie na INQUIRY? Hint: moze to trvat niekolko sekund.
    Jardík avatar 6.2. 02:28 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ano, ale flashka je SCSI zařízení, ačkoliv je připojena přes USB. A pokud snad něco vykonává, tak je tam snad nastaven nějaký zámek a dojde k timeoutu (?), který se u SCSI příkazu nastavuje.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    5.2. 22:02 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Na SCSI_INQUIRY bych se vykašlal, budit všechna zařízení jen proto, že hldám CD je hloupost, to se dělá tak leda ve Windows. /sys musí stačit.
    Jardík avatar 6.2. 02:37 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ve Windows SCSI_INQUIRY posílat právě nemusím na zjištění, jestli jde o CD-ROMKU, tam jsou na to funkce. Funkcí GetLogicalDrives() dostanu zařízení a funkcí GetVolumeType() dostanu info, jestli jde o CD-ROM, aniž by se požadavek posílal mechanice, protože to už Windows "ví".

    Tak mi tedy řekněte, kde v /sys ty mechaniky najdu, sice něco najdu, ale ať tam hledám jak divej, nikde nenalézám symlink na zařízení /dev/sg*
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    6.2. 11:22 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Nevím bohužel jak v tom C, což samozř. chápu že je pro vás zásadní, nicméně v shellu třeba takto:
    find /sys/devices -name 'media' | while read media; do
      [[ "$(<$media)" == "cdrom" ]] && echo "$media"
    done
    
    Jardík avatar 6.2. 12:22 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    find /sys/devices -name 'media' mi tu nenajde vůbec nic ...
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    6.2. 18:20 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Aha :( Když se sebezapřením použiji hal:

    hal-device $(hal-find-by-capability --capability storage.cdrom) | grep sysfs

    tak mi cdrom najde podle "capabilities". Je jich více: { 'storage', 'block', 'storage.cdrom' }

    Ve vygrepovaném adresáři v sysfs sice také existuje soubor capabilities, ale tam je jen "19". Kdyby to znamenalo cdrom (nedaří se mi najít význam toho souboru či čísla) tak by to mohlo pomoct:

    find /sys/devices -name 'capability' | while read capability; do [[ "$(<$capability)" == "19" ]] && echo "$capability" done

    ale bohužel jsem z toho jinak jelen :(
    6.2. 18:36 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    A protože properties jsou koukám nepovinné, tak by bylo asi bezpečnější:

    hal-device $(hal-find-by-property --key storage.drive_type --string cdrom) | grep sysfs

    ale jinak tomu vůbec nerozumím (to asi nemusím říkat).
    6.2. 18:37 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Oprava: A protože propertiescapabilities
    Jardík avatar 6.2. 20:03 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    HAL je však to, čemu jsem se chtěl vyhnout.

    Zatím jsem našel něco v /sys/bus/scsi/. Jsou tam adresy zařízení ve tvaru A:B:C:D. Když do toho kouknu, jsou tam mimo jiné i údaje z inquery struktury (vendor, model, rev, ...) včetně type (5 = CD-ROM). Dále v tom adresáři je adresář scsi_generic, v něm adresář sg1 atd. Jenže tam nikde nevidím link na soubor s zařízením, který bych byl schopen otevřít a posílat SCSI příkazy, což je můj cíl (tak trochu si hraju a chci se dopracovat ke smazání cédéčka).
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    6.2. 20:51 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Link tam nie je (pretoze moze byt lubovolny pocet suborov, ktore reprezentuju toto zariadenie) - ale v adresari block najdes subor dev, v ktorom je MAJOR a MINOR.
    Jardík avatar 6.2. 21:26 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Super, takže kromě prohledávání /sys budu ještě prohledávat /dev, na každý soubor dělat stat a zjišťovat major/minor, zkusit ho otevřít a prohledávat další, protože tam může být třeba 20x pokaždé s jiným oprávněním. Nebo spíš prohledat celý filesystém, co když si náhodou root vzpomněl zařízení vytvořit v uživatelově adresáři místo v dev. Tady je vidět hezké a přehledné "API" linuxu. Radši zůstanu u svého způsobu a počkám si na inquiry a budu předpokládat SCSI zařízení jako /dev/sgX, než trávit půl hodiny prohledáváním filesystému.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    Jardík avatar 6.2. 21:29 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    ... než trávit půl hodiny prohledáváním filesystému ... a stejně předpokládat 100 jiných věcí.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    7.2. 12:22 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Dufam, ze sa s tvojimi programami nikdy nestretnem. Nechces to radsej urobit pre Windows?
    7.2. 09:36 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    To je řešení?blbost, musí to být v /sys/devices. HAL vám nenutím, měl sloužit jen k identifikaci problému.

    Zatím je rozdíl v tom, že vy máte scsi a já ide cd-rom.

    Chcete říct, že vám ten hal to zařízení v /sys/devices nenašel?

    Osobně mám v /sys/devices jak ide tak scsi zařízení.
    Jardík avatar 7.2. 13:32 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    IDE CD-ROM stejně používá SCSI rozhraní ke komunikaci, já mám SATA.

    Ano, HAL mi věnuje řádek s /sys/devices/pci0000:00/0000:00:1f.2/host1/target11:0:0/1:0:0:0/block/sr0, ale z toho taky nedostanu cestu k zařízení. Navíc zařízení /dev/sr0 nemůžu SCSI příkazy posílat, jeho otevřením se totiž otevře to médium, co tam je, musí se otevřít generické scsi zařízení /dev/sgX.

    Škoda, že se kvůli debilní licenci nemůžu podívat do zdrojáků cdrecordu nebo wodimu. Zkusím naně strace ... á, někdo si může stěžovat na můj přístup, co dělá wodim. Zkouší otevírat všechna zařízení /dev/hda až /dev/hdz, /dev/scd1 až /dev/scd255 a pokud se je podaří otevřít, posílá jim SCSI příkazy. Takže opravdu zůstanu u svého způsobu, když to jinak očividně nejde.

    Taky nechápu, proč wodim používá flag O_EXCL pro volání open() bez O_CREAT, když manuálová stránka píše, že je pak výsledek nedefinovaný.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    Petr Šobáň avatar 7.2. 13:35 Petr Šobáň | skóre: 73 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Já si taky myslím že přes hal je to nejednoduší, než prohledávat hromadu adresářů.

    Mě příkaz: "hal-device $(hal-find-by-property --key storage.drive_type --string cdrom) | grep sysfs" cdrom najde viz:
    [petr@nt /sys/devices]$ hal-device $(hal-find-by-property --key storage.drive_type --string cdrom) | grep sysfs
      linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:11.0/host1/target1:0:0/1:0:0:0/block/sr0'  (string)
    [petr@nt /sys/devices]$ 
    
    Doktoři, lékárníci a poslanci při přečtení tohoto příspěvku jsou povinni zaplatit poplatek 30,-Kč provozovateli portálu.
    Jardík avatar 7.2. 15:22 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jak jsem řekl, výsledek tohoto příkazu mi je k ničemu, protože mi nedá link na SCSI zařízení a v tom adresáři to taky nikde není. Navíc by to znamenalo závislost na obludě jménem HAL, a která je navíc označena za deprecated.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    Petr Šobáň avatar 7.2. 18:16 Petr Šobáň | skóre: 73 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jasně já v tom neporadím, prostě buď to budeš muset skoušet a nebo použít ten hal a potom předpokládat že /dev/srX = /dev/sgX ovšem já nemám víc mechanik abych to testnul zda to platí.
    Doktoři, lékárníci a poslanci při přečtení tohoto příspěvku jsou povinni zaplatit poplatek 30,-Kč provozovateli portálu.
    Jardík avatar 7.2. 18:44 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    To neplatí, mechaniku mám sr0, ale sg0 je můj pevný disk.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    7.2. 19:14 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    No já nevím, ale podle mně platí to co řekl R,
    Link tam nie je (pretoze moze byt lubovolny pocet suborov, ktore reprezentuju toto zariadenie) - ale v adresari block najdes subor dev, v ktorom je MAJOR a MINOR.
    vám sice následně ruply nervy, ale osobně nepovažuji za velký problém projít těch pár AKTIVNÍCH sg zařízení, otevřít pár souborů dev a přečíst si major a minor, čímž mám /dev/srX (v případě scsi).

    Zkuste mrknout na sg_map, v nové verzi pracuje se sysfs.
    $ sg_map
    
    # Note: the devfs pseudo file system is present
    
    /dev/sg0 /dev/sda
    
    /dev/sg1 /dev/sr0
    
    /dev/sg2 /dev/sr1
    Samozřejmě je pořád možnost dělat to postaru, pokud jste pod tlakem.
    7.2. 19:16 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Vemte si (nevím pro co to programujete) ale asi nebude připojených těch mechanik 50, ne? A i kdyby, otevřít padesát souborů ještě nikoho nezabilo.
    7.2. 19:20 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ta novější verze se jmenuje sg_map26 (See the sg_map26 utility for a more precise way (i.e. less directory scanning) for mapping between sg device names and higher level names; including finding user defined names.)
    Jardík avatar 8.2. 00:37 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Ještě na to kouknu. Asi udělám kompromis - kouknu do /sys/bus/scsi/devices, tam vyhledám všechny adresáře ve formátu U:V:X:Y, tam vezmu typ (5=CDROM), kouknu do scsi_generic, kde je u mě jediný adresář (např. sg1), v tom mám soubor dev, kde je major:minor, pak podle toho adresáře (sg1) zkusím otevřít stat na /dev/sg1, pokud budou sedět major/minor a typ souboru device, tak otevřu (nebo otevřít a pak fstat()?) a inquiry pošlu pak k ověření a dále s ním budu pracovat. A pokud tam sg zařízení nebude (např. ho někdo smazal a udělal si ho v /home (paranoia :-))), tak smůla.

    A může mi někdo ještě osvětlit atribut O_EXCL u open(), když není uveden O_CREAT? V manuálové stránce se popisuje nedefinované chování, ale wodim/cdrecord ho tak používají.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    8.2. 09:56 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=262678
    8.2. 18:23 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Pro jistotu zopakuji že HAL jsem se sebezapřením použil jen jako nástroj univerzální komunikace schopný (jednorázově) najít tazatelovu scsi cdromku a její cestu v sysfs, abychom se pohnuli dále. Jinak samozřejmě HAL je přesně ten, kdo suverénně budí na co sáhne. Je možná zábavné sledovat, jak když se spustí hal, rozjíždí se všechny externí disky (a že na firewire jich může být zapojených hodně), zavrní cdromky, zablikají skenery, vrata od garáže se otevřou a zavřou, no trochu přeháním ale každopádně příklad hodný následování to není :)
    Jardík avatar 9.2. 20:08 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Fuj, tak jsem to tak udělal a můžu říct jedno - je to prasárna :-) Hledání CD-ROM mechanik a jejich vložení do seznamu má ve Windows verzi 34 řádků (počítám i řádky, které mají jen otevírací/uzavírací závorky {,}).

    V Linuxové verzi jsem teď na 174 řádcích a teď zbývá ještě dopsat kód na prohledání celého /dev pro případ, že zařízení /dev/jméno_co_se_našlo_v_sysfs neexistuje, nebo se jeho major/minor neshoduje s tím v /sys.

    Kdyby někoho zajímalo, jak to vypadá ve Windows:
      TSCSIDrive *drive;
      TSCSIDrive tmpDrive;
      uint8_t device_type;
      
      /*
       * Using GetLogicalDrives() could speed up things, but there is always
       * possibility, that drive has no letter assigned, is mounted to NTFS
       * folder or it is not even mounted. This way we handle all these cases.
       */
      HANDLE hVolumeSearch;
      /*
       * Volume name is in "\\?\Volume{ITS_GUID}\" format,
       * GUID's format is AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
       */
      WCHAR volumeName[MAX_PATH];
      
      hVolumeSearch = FindFirstVolumeW(volumeName, MAX_PATH);
      
      if (hVolumeSearch != INVALID_HANDLE_VALUE)
      {
        do
        {
          volumeName[MAX_PATH-1] = 0;
          
          if (GetDriveTypeW(volumeName) == DRIVE_CDROM)
          {
            tmpDrive._open_fn = volumeName;
            
            // remove trailing slash so that we open drive itself and not
            // the medium inserted
            if (tmpDrive._open_fn[tmpDrive._open_fn.size()-1] == '\\')
            {
              tmpDrive._open_fn.erase(tmpDrive._open_fn.size()-1);
            }
            
            if (tmpDrive.openDrive())
            {
              tmpDrive.setTimeout(10);
              
              // request inquiry data and make sure OS didn't lie to us
              if (tmpDrive.inquiry(tmpDrive._inqData, TSCSIDrive::INQUIRY_DATA_SIZE))
              {
                device_type = (tmpDrive._inqData[0] & 0x1F);
                
                if (device_type == 0x05 /* CD-ROM */)
                {
                  drive = new TSCSIDrive();
                  tmpDrive.readScsiAddress(drive->_address);
                  drive->_open_fn = std::move(tmpDrive._open_fn);
                  memcpy(drive->_inqData, tmpDrive._inqData, TSCSIDrive::INQUIRY_DATA_SIZE);
                  _drives.push_back(drive);
                }
              }
              tmpDrive.closeDrive();
            }
            tmpDrive._open_fn.clear();
          }
        
        } while (FindNextVolumeW(hVolumeSearch, volumeName, MAX_PATH));
        
        FindVolumeClose(hVolumeSearch);
      }
    
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    9.2. 20:24 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Asi proto člověk občas vidí system("lsscsi | grep ...") :)
    Jardík avatar 9.2. 22:37 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Takový program (lsscsi) však nemám a byla by to další závislost (já vím, že jsem s tím už trapnej, ale to jsem prostě já :-))
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    kralyk avatar 9.2. 22:48 kralyk | skóre: 22 | blog: Untitled
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Můžeš ten prográmek/knihovnu k tomu přibalit (á la windoze), a basta. Tím by ses imho ani nedostal do konfliktu s GPL, pokud vím. Ale nejsem právník.
    Youtube jde (částečně) v HTML5 | křesťan != katolík
    9.2. 23:27 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Však jo, tohle rozhodně neměl být příklad lepšího řešení :) A nejedná se o knihovnu, takže v céčkovém programu je to stejně nanic.
    Jardík avatar 9.2. 23:58 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Tak spustit příkaz z Céčkového programu a parsovat jeho výstup není problém, ale jestli mám parsovat nějaký výstup, nebo prohledávat sys, to už vyjde na stejno.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    11.2. 07:37 zulu
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    174 řádků? Ukaž nám ten kód, ať se zasmějem.
    6.2. 20:37 maertien
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Coz prolejzat /proc/ide/* ???
    Jardík avatar 6.2. 21:18 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Já se teď nemůžu podívat, ale bude tam i SATA mechanika?
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    7.2. 09:44 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Na proc se vykašlete když máme sysfs.

    Vizte Documentation/sysfs-rules.txt a další.
    7.2. 19:25 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jinak vykašlete == jednak on má scsi, čili /proc/scsi, a potom to není spolehlivé u zařízení připojených za chodu, a takových je dneska hodně.
    8.2. 16:50 maertien
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jiste - /proc/scsci/* . Neprecetl jsem si tazateluv dotaz poradne. A je fakt, ze proc je v tomto kontextu jiz mirne obsoletni.
    kralyk avatar 8.2. 17:54 kralyk | skóre: 22 | blog: Untitled
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Buď bych zkusil něco v /proc/scsi, ale být tebou spíš od filesystému upustím.

    Když se podíváš do dmesg, tak v něm jsou většinou příslušný devices vypsaný.
    Jsem přesvědčen, že bude v linuxu existovat nějaká knihovna či rozhraní systému, která ti umožní SCSI devices vylistovat.

    Zkustil jsem namátkou pár příkazů (velmi hrubé info - potřeba googlovat):
    vojta|vojta-dell ~ $> pkg-config --list-all | grep -i cd
    libcdt                           libcdt - Container DataType library
    libudf                           libudf - UDF library of libcdio
    libcdio++                        libcdio++ - C++ OO Portable CD-ROM I/O library
    libcdio                          libcdio - Portable CD-ROM I/O library
    libiso9660++                     libiso9660++ - C++ OO ISO-9660 library of libcdio
    libiso9660                       libiso9660 - ISO-9660 library of libcdio
    gstreamer-cdda-0.10              GStreamer CDDA Library - CDDA base classes
    libcdio_cdda                     libcdio_cdda - CD paranoia CD-DA library from libcdio
    libcdio_paranoia                 libcdio_paranoia - CD paranoia library from libcdio
    libcddb                          libcddb - CDDB server access library
    
    vojta|vojta-dell ~ $> pkg-config --list-all | grep -i devic
    libgphoto2_port                  libgphoto2_port - Device-independent access to serial, USB, and other ports
    devkit-power-gobject             devkit-power-gobject - DeviceKit-power is a system daemon for installing stuff.
    gnome-bluetooth-1.0              gnome-bluetooth-1.0 - Widgets for Bluetooth device selection
    usbutils                         usbutils - USB device database
    libmtp                           libmtp - libmtp is a library for accessing Media Transfer Protocol devices
    devmapper-event                  devmapper-event - device-mapper event library
    pciaccess                        pciaccess - Library providing generic access to the PCI bus and devices.
    libsynce                         libsynce - A helper library for SynCE, a framework to sync WinCE devices
    libavdevice                      libavdevice - FFmpeg device handling library
    DeviceKit-disks                  DeviceKit-disks - DeviceKit-disks daemon
    blkid                            blkid - Block device id library
    devmapper                        devmapper - device-mapper library
    libv4l2                          libv4l2 - v4l2 device access library
    hal-storage                      hal-storage - hal library for storage devices and volumes
    libudev                          libudev - Library to access udev device information
    
    vojta|vojta-dell ~ $> pkg-config --list-all | grep -i dvd
    dvdread                          libdvdread - Low level DVD access library
    dvdnavmini                       libdvdnavmini - DVD Navigation mini library
    libdvdcss                        libdvdcss - DVD access and decryption library.
    dvdnav                           libdvdnav - DVD Navigation library
    vojta|vojta-dell ~ $>
    
    
    Především ta prostřední skupina mi přijde zajímavá.
    Případně se můžeš podívat do zdrojáků různých nástrojů na zjišťování info o HW (např. hwd a mnoho dalších...).

    Dále by tvým rádcem mohlo být toto hledání

    Určitě existuje způsob, jak tohle řešit lépe, než prohledáváním filesystému (ať už v /dev, /sys, nebo /proc), už jen ten způsob najít ;-)
    To, co jsem ti tu vypsal, jen výsledek asi pětiminutového "výzkumu", tudíž nečekej zázraky...
    Youtube jde (částečně) v HTML5 | křesťan != katolík
    kralyk avatar 8.2. 18:01 kralyk | skóre: 22 | blog: Untitled
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jo, a ještě můžeš oblígátně použít google, chce to vhodný dotaz.
    Například tento nebo tento.
    Youtube jde (částečně) v HTML5 | křesťan != katolík
    Jardík avatar 8.2. 21:08 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Já ty SCSI tutoriály právě četl, nějaké od IBM a pod, ale nikde tam nepíšou o nalezení, jen otevři zařízení /dev/sg0 a dělej co je tu napsáno :-)
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    8.2. 18:47 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Šmarjá, asi koupím flintu a pudu na zajíce.

    /proc/scsi fakt ne, tam nemáš jistotu že budou zařízení připojená za chodu. Už jsem to tu dvakrát říkal.

    Jo, vylistovat scsi zařízení můžeš, jsou všechna nečekaně v /sys/devices.

    Utilita tu už taky byla, jmenuje se sg_map. Nová verze sg_map26 překvapivě funguje nad /sys... Takže pokud nepoužíváš jádro 2.4...

    Hovoříš o linuxu a máš něco proti souborům? Dobré ráno. V linuxu je všechno důležité soubor, a pokud ne soubor, tak alespoň virtuální filesystém. sysfs je standardní rozhraní a má světlou budoucnost (TM).

    V linuxu to takto prostě funguje, filesystém a soubory jsou rozhraní k jádru, zařízením a dalším věcem. Je to základní princip fungování, ne něco špatného či nevhodného. Není lepší způsob, protože sysfs není špatný způsob.

    Pět minut je fakt málo.
    kralyk avatar 8.2. 19:26 kralyk | skóre: 22 | blog: Untitled
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Se uklidni prosimtě, já proti filosofii "everything is file" rozhodně nic nemám.

    Tím "prolejzáním filesystému" jsem myslel zmíněnou metodu vylistování /dev nebo volání různých find někde na /proc nebo /sys, to je prostě blbost.

    Další věc je, že občas člověk skutečně nemusí vynalézat kolo. Tedy nemá smysl psát parser struktury sysfs (nebo něčeho jiného), když (třeba, nevim) existuje odladěná a spolehlivá knihovna pro tenhle účel.
    Někdy ovčem člověk vynalézat kolo z cvičných důvodů chce, a proti tomu nic nemám (bez ironie, sám to často dělám...)
    Youtube jde (částečně) v HTML5 | křesťan != katolík
    Jardík avatar 9.2. 20:12 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Jenže knihovna = závislost a tím pádem nutnost ji instalovat kvůli jinému programu. Pak z toho vyjde prasárnička typu Hello World! v KDE, kdy kvůli jedné aplikaci, co ukáže okno s nápisem musíte instalovat půl giga závislostí.
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    Jardík avatar 9.2. 20:14 Jardík | skóre: 37 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Navíc ta knihovna má špatnou licenci (tj. není pod licencí Do what the fuck you want to public license)
    Ruská ruleta (spustit jako root): [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /*
    9.2. 20:58 Ash | skóre: 48
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Od toho knihovny jsou, aby se přidávaly k hlavnímu programu jakožto odladěná znovupoužitelná věc. To o čem mluvíte je spíš přidat jako závislost třeba nějaký nástroj pro "hledání dvd, vypalování iso obrazů a tisk popisků DVD", to je samozřejmě špatně, ale přidat si knihovnu pro procházení sysfs, proč ne, když bude mít nějaké pěkné rozhraní. Nesmí to vést k taovému tomu "najdi mi tohle" chrocht chrocht, jo a "ještě tohle" chrocht chrocht, zatímco ve vlastním kódu by si to člověk promyslel a pak našel na jeden zátah výrazně efektivněji (asi neplatí zrovna pro sysfs, je malej, tam to je hned).

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   Powered by 64bit.eu   64bit.eu logo
    © 1999-2010 Stickfish, s. r. o. Všechna práva vyhrazena.