Portál AbcLinuxu, 2. května 2025 11:19
Mažu, mažeš, mažeme
20.2.2010 17:54
| Přečteno: 1291×
| Programování
| poslední úprava: 22.2.2010 23:54
Pro Windows je spousta vypalovacích programů, ale jen jediný (konkrétně Nero) umí vypalovat vypalovačkou, co nemá přiřazeno žádné písmenko (je připojena do NTFS adresáře - ano, i to Windows umožňuje), nedej bože není připojena vůbec.
Pro Linux je tu jen komerční nero a "příkazový" cdrecord či ten jeho fork jánevímjaksejmenuje a pak nadstavby nad ním. Jenže - k3b je docela dobrý soft, jenom mu to občas nejde, protože cdrecord (cdrecord špatně detekuje rychlosti na mojí palírně a nabízí kraviny typu 3,1x, nebo 16,1x, i když to médium nepodporuje a ono to pak na něj snad i 16x pálí, protože to hučí jakkráva. Takové nero, to rychlosti detekuje dobře, jenomže stojí penízky.
To mě vedlo na myšlenku vytvořit si vlastní vypalovací program. A hle, detekce vypalovačky, co není připojena, či je připojena do adresáře, je na Windows absolutní prkotina o 5 řádcích kódu - nechápu, proč to ty aplikace neumí. Na Linux je to díky žádnému API pro enumeraci zařízení bolest v prdeli, viz diskuse.
No což, něco jsem ubastlil, studoval nějaký ty SCSI standardy a příkazy a momentálně to umí mazat CD-RW, DVD-RW a možná DVD+RW (disk nemám, nemůžu vyzkoušet). Chystá se i podpora BD-RE (ano, můj vypalovací program bude umět vypalovat blu-ray disky. Zatím nemám vypalovačku, ale ve standardech je to hezky zdokumentováno a brzy si ji stejně pořídím.
Kód, co jsem zatím napsal, toho umí víc, ale testovací aplikace je zatím poue okýnko na mazání disků (viz. screenshot).
Snažím se tam používat vlákna, aby se mi to nezasekávalo, ale nějaký ten zásek tamje, né všechno mám zatím implementováno asynchroně.
Nejprve jsem to psal bez použití nějakých knihoven, v C++ s použitím milovaného C++0x. GCC má mizernou podporu a tak jsem si nemohl dovolit lambda funkce a spoustu dalšího. Použil jsem zatím jen move konstruktory, delete na mazání kopírovacích konstruktorů, typed enumy, std::thread a std::function a spol. Jenže pak jsem překládal ve Windows a zjistil, že mingw-w64 nemá podporu pro std::thread. Tak jsem se na std::thread vykašlal a jelikož budu stejně potřebovat nějaký to GUIčko, tak jsem nakonec šáhl po Qt4. To však neznamená, že se zbavím všech hezkých C++0x fíčurek a tak bude ke kompilaci potřeba minimálně GCC 4.4, v budoucnu možná vyšší.
Na obrázku se můžete kouknout, jak vypadá mazací dialog a pokud se najde zájemce o otestování, můžu poslat zkompilovanou binárku, zdrojová kódy zveřejním až to bude v trochu pokročilejším stavu, a to pod licencí Do What The Fuck You Want To Public License
. Testovací binárku poskytuji pouze pro osobní potřebu a nesmíte ji dále šířit. Zájemci (jako že jich stejně asi moc nebude) mohou poslat e-mail s žádostí (stačí napsat třeba Hele vole, pošli mi ten burn program, verzi pro Windows/Linux
) na jardasmid at gmail dot com
. Binárka je určena pouze pro procesory x86_64. Binárku pro Windows posílám bez podpůrných knihoven (Qt4), ty si pro Windows musíte zkompilovat sami - budete potřebovat mingw-w64 a opatchované zdrojáky Qt4 (protože jsou tam prasárny typu pointer na int long, což mingw-w64 odmítá jako errory).
Poznámka: Souboru FogTest.cpp na obráku si nevšímejte, jenom se mi to připletlo do sezení v Kate.
Update
Možná udělám i verzi pro FreeBSD x64, letmo jsem koukal na API a vypadá to, že scanování je oproti linuxu radost.
Obrázky
Tiskni
Sdílej:
Komentáře
Vložit další komentář
21.2.2010 00:16
kotyz | skóre: 25
| blog:
kotyzblog
| Plzeň
Re: Mažu, mažeš, mažeme
22.2.2010 19:06
Aminux
Re: Mažu, mažeš, mažeme
28.2.2010 15:07
Prcek | skóre: 43
| Jindřichův Hradec / Brno
Re: Mažu, mažeš, mažeme
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.