abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 11
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 2
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 8
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (20%)
    Celkem 562 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Nalezení CD-ROM mechanik

    Jardík avatar 5.2.2010 03:10 Jardík | skóre: 40 | blog: jarda_bloguje
    Nalezení CD-ROM mechanik
    Přečteno: 1059×
    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.
    Věřím v jednoho Boha.

    Řešení dotazu:


    Odpovědi

    5.2.2010 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.2010 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.2010 11:24 Jardík | skóre: 40 | 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++.
    Věřím v jednoho Boha.
    5.2.2010 15:37 Ondřej Kopka | skóre: 20 | blog: ondrejk
    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.2010 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.2010 11:23 Jardík | skóre: 40 | 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ě?
    Věřím v jednoho Boha.
    5.2.2010 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.2010 12:51 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    A pripadne sa pozri na libsysfs.
    Jardík avatar 5.2.2010 16:27 Jardík | skóre: 40 | 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í?
    Věřím v jednoho Boha.
    5.2.2010 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.2010 02:28 Jardík | skóre: 40 | 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.
    Věřím v jednoho Boha.
    5.2.2010 22:02 Ash | skóre: 53
    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.2010 02:37 Jardík | skóre: 40 | 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*
    Věřím v jednoho Boha.
    6.2.2010 11:22 Ash | skóre: 53
    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.2010 12:22 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    find /sys/devices -name 'media' mi tu nenajde vůbec nic ...
    Věřím v jednoho Boha.
    6.2.2010 18:20 Ash | skóre: 53
    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.2010 18:36 Ash | skóre: 53
    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.2010 18:37 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Oprava: A protože propertiescapabilities
    Jardík avatar 6.2.2010 20:03 Jardík | skóre: 40 | 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).
    Věřím v jednoho Boha.
    6.2.2010 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.2010 21:26 Jardík | skóre: 40 | 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.
    Věřím v jednoho Boha.
    Jardík avatar 6.2.2010 21:29 Jardík | skóre: 40 | 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í.
    Věřím v jednoho Boha.
    7.2.2010 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.2010 09:36 Ash | skóre: 53
    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.2010 13:32 Jardík | skóre: 40 | 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ý.
    Věřím v jednoho Boha.
    7.2.2010 13:35 Petr Šobáň | skóre: 80 | 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]$ 
    
    Jardík avatar 7.2.2010 15:22 Jardík | skóre: 40 | 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.
    Věřím v jednoho Boha.
    7.2.2010 18:16 Petr Šobáň | skóre: 80 | 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í.
    Jardík avatar 7.2.2010 18:44 Jardík | skóre: 40 | 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.
    Věřím v jednoho Boha.
    7.2.2010 19:14 Ash | skóre: 53
    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.2010 19:16 Ash | skóre: 53
    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.2010 19:20 Ash | skóre: 53
    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.2010 00:37 Jardík | skóre: 40 | 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í.
    Věřím v jednoho Boha.
    8.2.2010 09:56 R
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=262678
    8.2.2010 18:23 Ash | skóre: 53
    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.2010 20:08 Jardík | skóre: 40 | 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);
      }
    
    Věřím v jednoho Boha.
    9.2.2010 20:24 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Asi proto člověk občas vidí system("lsscsi | grep ...") :)
    Jardík avatar 9.2.2010 22:37 Jardík | skóre: 40 | 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á :-))
    Věřím v jednoho Boha.
    9.2.2010 22:48 kralyk z abclinuxu | skóre: 29 | blog:
    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.
    9.2.2010 23:27 Ash | skóre: 53
    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.2010 23:58 Jardík | skóre: 40 | 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.
    Věřím v jednoho Boha.
    11.2.2010 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.2010 20:37 maertien
    Rozbalit Rozbalit vše Re: Nalezení CD-ROM mechanik
    Coz prolejzat /proc/ide/* ???
    Jardík avatar 6.2.2010 21:18 Jardík | skóre: 40 | 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?
    Věřím v jednoho Boha.
    7.2.2010 09:44 Ash | skóre: 53
    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.2010 19:25 Ash | skóre: 53
    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.2010 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.
    8.2.2010 17:54 kralyk z abclinuxu | skóre: 29 | blog:
    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...
    8.2.2010 18:01 kralyk z abclinuxu | skóre: 29 | blog:
    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.
    Jardík avatar 8.2.2010 21:08 Jardík | skóre: 40 | 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 :-)
    Věřím v jednoho Boha.
    8.2.2010 18:47 Ash | skóre: 53
    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.
    8.2.2010 19:26 kralyk z abclinuxu | skóre: 29 | blog:
    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...)
    Jardík avatar 9.2.2010 20:12 Jardík | skóre: 40 | 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í.
    Věřím v jednoho Boha.
    Jardík avatar 9.2.2010 20:14 Jardík | skóre: 40 | 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)
    Věřím v jednoho Boha.
    9.2.2010 20:58 Ash | skóre: 53
    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   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.