Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
Zaprvé neumím pořádně C++ (nekamenujte mě)Nebudu, já taky ne
A zadruhé jsem pro to, aby paralelně existovalo víc projektů.Jasně, ale šlo by to rychleji a výsledek by byl lepší. No ale když to každý chcete psát v jiném jazyce, to je pak těžký, to je fakt...
Total PlesingerLOL!
Naopak, nedokazem si predstavit, ako niekto dokaze napisat gui v c. To musi byt ultrahnus ( a verte, ze par pokusov s gtk som mal ). Takisto ma totalne dorazili prve pokusy s gstreamer, z toho mi bolo na zvracanie.v tom pripade dufam, ze nepouzivas GIMP ani ine Gtk+ programy :P
Konstrukcie ako
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_element_set_state (pipeline, GST_STATE_PLAYING);
gst_object_unref (GST_OBJECT (pipeline));
su totalne obskurdnosti. Odvtedy mam totalnu averziu voci vsetkym "g-style" knizniciam.
X(1:N) = X1(1:N) + X2(1:N)vs
DO I = 1, N X(I) = X1(I) + X2(I) ENDDOv prvním případě překladač hned ví, že to může optimalizovat, zatímco ve druhém to musí zkoumat, aby došel k závěru, že výpočet v jednom cyklu neovlivňuje výpočet v cyklu jiném, takže to může vektorizovat
Plus(a,a)
, takže pořád nevidím, v čem C++ brání optimalizaci. Naopak, mohlo by jí pomoci, pokud by jazyk umožňoval specifikovat hint typu "tenhle operátor je komutativní", ale to bychom asi chtěli moc…
Plus(a, b)
klidně může být realizováno jako a.add(b)
a že pak to a + a + a + a
na 4 * a
redukovat nejde, protože v okamžiku překladu nevím, co dělá to add
. Když je to POD tak tam samozřejmě žádná překážka není.
Chtěl jsem to v této diskuzi hlavně pochopit, protože C++ skoro neznám.
To už bych to rovnou mohl napsat v QT. Problém je v tom, ž QT je zbytečně pomalá knihovna - právě kvůli C++.Prosím neFUDovat. QT je velmi rychlá knihovna, troufnul bych si dokonce říct, že rychlejší než GTK1. Jako člověk, co dělá s hudebními programy to vidím denně. Tyto programy mají narozdíl od různých gimpů, email klientů a www browserů obrazovku posetou mraky pohyblivých elementů, skákají tam různé VU metry a posouvají se slidery. Je na tom krásně vidět, jak který toolkit tyto věci (ne)stíhá. Třeba takový ardour 0.9x (GTK1) jede na mém stroji dost dobře. Připravovaný ardour2 (pouze přepsání pro GTK2) už je skoro nepoužitelný, jak mu GUI "plave". A to není zatížením CPU, které je velmi malé. Ostatní GTK aplikace jakbysmet. Když pak vedle toho pustím třeba hydrogen (QT apikace - počet i design pohyblivých elementů je srovnatelný s ardourem), tak ten vyloženě "frčí". To samé se dá říct o srovnání dalších obdobných aplikací. A opravdu se mi nezdá, že je to tím, že by autoři aplikací nad GTK neuměli programovat a ti od QT jo.
class Process { uint pid; char *name; ... }; class Filesystem { ...LOL
Aby som to zhrnul, nevidel som v živote nič tak nepodobné PHP ako D.
No, o tom bych si dovolil pochybovat. Sice D vůbec neznám, ale pokud je aspoň trochu podobné C, tak by se určitě něco našlo… :-)
Stači kus marketingu, silnú spoločnosť a z jazyku je hit raz dva.
Zrovna u Javy bych tomu "raz dva" neříkal. Tam bylo potřeba několik let intenzivního plošného brainwashingu…
To je asi zásadný rozdiel medzi nami, ja nehľadím na to, ako zarobiť
Jen počkejte, až si vezmete hypotéku… :-)
a29k alpha - ev5 - ev6 - ev67 arm clipper cray - cfp - ieee generic (Cčko) i960 ia64 m68k - mc68020 m88k - mc88110 mips32 mips64 ns32k pa32 - hppa1_0 - hppa2_0 pa64 power powerpc32 - 750 - vmx powerpc64 - mode32 - mode64 - vmx pyr s390 sh - sh2 sparc32 - v8 - v9 sparc64 thumb vax x86 - fat - i486 - k6 - k7 - p6 - pentium - pentium4 x86_64 z8000 z8000xTo je seznam adresářů s machine-dependent soubory, povětšinou asm, zčásti C.
V STLku je problém, že každá kravina sa robí neúnosne zložito.
No to nesouhlasim ani za mak. Naopak template tridy dovolujou rozdelit problem na podproblemy (politiky, traity), aniz by tam byla rezie navic. A pak se soustredite jen na jednu cast - podproblem. V STL je sila v tom, ze oddelite algoritmy od dat a jako interface slouzi kontejnery. Staci to pochopit a pak se celej koncept(sablon) v stl opakuje. Ale co se tady budu vypisovat, prectete si Alexandreska a mozna zmenite nazor.
Konvertovať s STL string do intu je síce elegantné a dá sa na to zvyknúť
Konverze mezi cisly a stringy je narocnejsi, ale v pristim standardu je proposal na konverzni funkce. Viz boost::lexical_cast Pak muzete spachat neco jako tohle:
template<typename T> inline T convertToFrom( const std::string& fromString ) { T toT; std::istringstream tmStream(fromString); char c; if( !(tmStream >> toT) || tmStream.get(c)) throw std::out_of_range( "convertToFrom is std::out_of_range." ); return toT; }
Suma sumárum, STL nemá expresívnu silu.
Dalsi podle mne unahleny nazor. Jestli povazujete STL za kompozici rozsiritelnych nastroju postavenych na zaklade sablon(a tak to je!), pak se podivejte na parser boost::spirit. Pouzivam jej a je to po urcite dobe pouzivani velmi intuitivni nastroj vyuzivajici sablony do takove urovne, ze prekladac jde do kolen, jak pise autor. Ale funguje to, je to rychly, intuitivni a spolehlivy.
uint32_t
ani int64_t
povinné nejsou ani podle C99…
Podle mě v C++ právě chybí abstrakce na úrovni datových struktur, aby existoval literál typu pole, seznam, asiciativní pole.Co presne mate na mysli? Navrhuje se umoznit podobne veci:
std::vector<int> vec = { 1, 2, 10, 16 };
Dále mi chybí v C++ klíčové slovo finally pro výjimky.Mame RAII.
Pokud se pokusíte rozšířit třeba funkčnost streamů poděděním, zjistíte, že máte smůlu, protože neexistuje ani virtuální destruktor, ani virtuální metody, které by měly být logicky virtuální. Vše ve jménu ušetření několika taktů.Ze navrh i/o v c++ neni z nejstastnejsich, se vi uz davno. Ale kvuli zpetne kompatibilite zmeny v teto oblasti muzete cekat jen velmi tezko.
je Gtk napsané v C, což je (podle mne) pro grafický toolkit naprosto nevhodný jazyk.Tobě se nelíbí
void*
? void*
sám o sobě není špatná věc. Problém ale je, když ho někdo zneužívá jako berličku k čuňárnám. Hlavně když pak takový kód mám přeložit pomocí čtyřkového GCC, které si hned tak něco nenechá líbit…
BTW, nedávno jsem dokonce objevil v hlavičkových souborech jádra použití pointerové aritmetiky s void*
. Potíž je, že zatímco gcc
to spolkne, g++
pochopitelně prská…
Na druhou stranu je samozřejmě stejně nešťastné, pokud někdo sice formálně píše v C++, ale hlava mu stejně dál myslí v C.
“If you know what you're doing, three layers is enough; if you don't, even seventeen levels won't help”je to skor upozornenie, ze pokial nevie programator co robi, tak mu C++ nepomoze. ostatne o tom tam pisal, tento citat to len anekdoticky zhrnuje. a autor je celkovo proti velkym monolitickym projektom (ved je to kniha o UNIX programming), takze kritika v tejto oblasti nie je prekvapujuca. ale ja som si zapamatal skor, ze treba vediet zvolit spravny jazyk, nez ze OOP je vsade zle okrem tych troch oblasti... aj to, ze thready viac-menej zavrhuje sa dalo ocakavat - zase UNIX programming. ale ak by niekto potreboval nasadit thready, tak by sa urcite nespoliehal len na nazor z jednej knihy. ja som z knihou tiez nesuhlasil uplne vo vsetkom, ale vacsina je IMO spravna a vedel som si to utriedit a urcite bola pre mna prinosom. a rad odkazujem tu cast o OOP, pretoze niektori zaciatocnici (dufam, ze len zaciatocnici) si aj dnes myslia, ze C++ je pupok sveta.
PES pes ( "rexo" ) { signals: brese_ako_hovado(); }; SUSED honza ( "pekny curak" ) { slots: rozsviet_svetlo_a_pozri_co_sa_deje(); }; ZLODEJ klepto ( "ma uz cosi za sebou" ); DOM dom ( "moje kralovstvo" ); connect ( pes, signal ( brese_ako_hovado ), honza, slot ( rozsviet_svetlo_a_pozri_co_sa_deje ) ); pes.straz ( dom );Toto je sice exemplarny priklad zneuzivania slotoveho mechanizmu v qt, ale ako priklad postaci ( tymto prikladom som ale nechcel poukazat na system signal/slot v qt, ale skor na objektovost jazyka ). Psovi kazem strazit dom. Ak pride zlodej k domu, pes zacne stekat a sused rozsvieti svetlo aby sa pozrel, co sa deje. V semi-objektovom C by to vyzeralo asi nejak takto:
main () { PES* pes = vytvor_novy_objekt_typu ( "PES" ); nastav_popisok ( pes, "rexo" ); SUSED* sused = vytvor_novy_objekt_typu ( "SUSED" ); nastav_popisok ( sused, "pekny curak" ); DOM* dom = vytvor_novy_objekt_typu ( "DOM" ); nastav_popisok ( dom, "moje kralovstvo" ); ZLODEJ* klepto= vytvor_novy_objekt_typu ( "ZLODEJ" ); nastav_popisok ( klepto, "ma uz cosi za sebou" ); // tymto cyklom nahradzam signal/slot mechanizmus // on sice v reale asi aj tak nejak funguje, ale ja sa o to v QT nemusim starat bool flag = true; while ( flag == true ) { if ( pes_brese ( pes ) == 1 ) { pes_brese_akcia ( pes, sused ); flag = false; } } zrus_objekt_co_si_vytvoril ( pes ); zrus_objekt_co_si_vytvoril ( sused ); zrus_objekt_co_si_vytvoril ( dom ); zrus_objekt_co_si_vytvoril ( klepto ); } void pes_brese_akcia (PES* pes, SUSED* sused) { SVETLO* svetlo = daj_mi_pointer_na_svetlo_niekde_na_susedovom_dome ( cislo_svetla ); rozsviet_svetlo ( sused, svetlo ); }Na prvy pohlad to mozno pride ako zmatocne, ale ked sa k tomu prida polymorf, dedicnost, ine vlastnosti oo jazyka, zlozitejsi projekt, zo standardnym C by sa clovek posral nieco poriadne napisat, nehovoriac o nachylnosti k chybam a tak podobne. Objektovy jazyk totiz svojim navrhom viac pripomina realny zivot a tak sa v nom aj programuje. PS. Snad som nepopisal nejake kraviny.
inputStream.open(const char*);
. Ovšem s řetězci je také sranda, mimo C polí a std::string
v C++ má navíc snad každá C++ knihovna starší sedmi let stringy vlastní.
const char*
moc nelíbí, viz C++0x wishlist (hned třetí požadavek). Ale to samozřejmě bude ještě nějaký ten rok trvat. Co se týká vlastních stringů v každé knihovně, to bohužel není problém jen C++ knihoven, to dělají i céčkové. Obzvlášť příjemné je to ve chvíli, kdy je potřeba v projektu takových knihoven použít víc, to člověk pomalu nedělá nic jiného, než že castuje jedotlivé xchary a xstringy mezi sebou, což ohromně zvyšuje čitelnost zdrojáku… :-(
std::string
y, spíš se prostě přidá sada metod, kde bude místo const char*
jako argument const std::string&
.
std::string
vrací nějaká jiná metoda jako výstup, tak se zbytečnou konverzí na const char*
paměťové nároky naopak zvyšují.
tak se zbytečnou konverzí na const char* paměťové nároky naopak zvyšujíMinimálně v GNU implementaci ne. Protože zavolání
c_str()
pouze poskytuje ukazatel na vnitřní reprezentaci, nikde se nic nealokuje.
gcc: -lgtk-x11-2.0: linker input file unused because linking not done gcc: -lgdk-x11-2.0: linker input file unused because linking not done gcc: -latk-1.0: linker input file unused because linking not done gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done gcc: -lm: linker input file unused because linking not done gcc: -lpangocairo-1.0: linker input file unused because linking not done gcc: -lpango-1.0: linker input file unused because linking not done gcc: -lcairo: linker input file unused because linking not done gcc: -lgobject-2.0: linker input file unused because linking not done gcc: -lgmodule-2.0: linker input file unused because linking not done gcc: -ldl: linker input file unused because linking not done gcc: -lglib-2.0: linker input file unused because linking not done gcc -c -Wall -g `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -DLANG_CZ -I. gui/about.c gcc: -lgtk-x11-2.0: linker input file unused because linking not done gcc: -lgdk-x11-2.0: linker input file unused because linking not done gcc: -latk-1.0: linker input file unused because linking not done gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done gcc: -lm: linker input file unused because linking not done gcc: -lpangocairo-1.0: linker input file unused because linking not done gcc: -lpango-1.0: linker input file unused because linking not done gcc: -lcairo: linker input file unused because linking not done gcc: -lgobject-2.0: linker input file unused because linking not done gcc: -lgmodule-2.0: linker input file unused because linking not done gcc: -ldl: linker input file unused because linking not done gcc: -lglib-2.0: linker input file unused because linking not done gcc -c -Wall -g `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -DLANG_CZ -I. gui/panel.c gcc: -lgtk-x11-2.0: linker input file unused because linking not done gcc: -lgdk-x11-2.0: linker input file unused because linking not done gcc: -latk-1.0: linker input file unused because linking not done gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done gcc: -lm: linker input file unused because linking not done gcc: -lpangocairo-1.0: linker input file unused because linking not done gcc: -lpango-1.0: linker input file unused because linking not done gcc: -lcairo: linker input file unused because linking not done gcc: -lgobject-2.0: linker input file unused because linking not done gcc: -lgmodule-2.0: linker input file unused because linking not done gcc: -ldl: linker input file unused because linking not done gcc: -lglib-2.0: linker input file unused because linking not done gcc -c -Wall -g `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -DLANG_CZ -I. lib/mounts.c gcc: -lgtk-x11-2.0: linker input file unused because linking not done gcc: -lgdk-x11-2.0: linker input file unused because linking not done gcc: -latk-1.0: linker input file unused because linking not done gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done gcc: -lm: linker input file unused because linking not done gcc: -lpangocairo-1.0: linker input file unused because linking not done gcc: -lpango-1.0: linker input file unused because linking not done gcc: -lcairo: linker input file unused because linking not done gcc: -lgobject-2.0: linker input file unused because linking not done gcc: -lgmodule-2.0: linker input file unused because linking not done gcc: -ldl: linker input file unused because linking not doneNa co předávat knihovny při obyčejné kompilaci? Si nech až na linkování.
/proc/mounts
v libs/mounts.c
. Připádá mi to dost prasácký. Jde to vyřešit nějak elegantněji? Neexistuje náhodou nějakej hotovej parser pro podobný věci? Jak byste to řešili?
rootfs / rootfs rw 0 0 none /dev ramfs rw 0 0 /dev/root / ext3 rw,data=ordered 0 0 none /dev ramfs rw 0 0 none /proc proc rw 0 0 none /sys sysfs rw 0 0 none /proc/bus/usb usbfs rw 0 0 none /dev/pts devpts rw 0 0 none /dev/shm tmpfs rw 0 0 /dev/hda1 /boot ext2 rw 0 0 /dev/hdb2 /home ext3 rw,data=ordered 0 0Můžeš tam alespoň vynechat, aby se nevipisovali ty s "none"? Dvakrát / a /dev se mi tam také nelíbí, nechápu proč to je v /proc/mounts 2x
df
? Nejjednodušším způsobem, jak zjistit, jak se to doopravdy dělá, bude náhled do zdrojáků df
(výhoda OpenSource), nebo třeba busyboxu
(jednodušší a tím pádem i přehlednější). Jenom, ten, kdo chce mít výsledek pod BSD licencí, ať se raději podívá na neGPL utilitky getmntent(3)
exec()
?)
df
? statfs(2)
… a zkuste se už oprostit od parsování výstupu.
#include <gtk/gtk.h> #include <stdio.h> #include <mntent.h> #include <include/locale.h> #include <include/version.h> #include <include/panel.h> extERN VOID Set_mounts(struct myPanel panel) { GList *glist = NULL; gchar **name; struct mntent mnt; gint i; FILE *fd = setmntent("/etc/mtab", "r"); i = 0; while (getmntent(fd)){ name[i] = mnt.mnt_dir; glist = g_list_append(glist, name[i]); i++; }; endmntent(fd); gtk_combo_set_popdown_strings(GTK_COMBO(panel.mounts), glist); return; }Zkompiluje se to bez problému, ale při spuštění to hází Segmantation fault. Nevíte někdo kde je chyba? Asi nějaký zapomenutý ukazatel. Nejspíš jsem lama, ale já tam fakt nic nevidim.
#include <gtk/gtk.h> #include <stdio.h> #include <mntent.h> #include <string.h> #include <stdlib.h> #include <include/locale.h> #include <include/version.h> #include <include/panel.h> extern void set_mounts(struct myPanel panel) { GList *glist = NULL; gchar *name[255]; struct mntent *mnt; gint i; FILE *fd = setmntent("/etc/mtab", "r"); i = 0; while ((mnt = getmntent(fd)) && i < 256){ name[i] = (char*) malloc(strlen(mnt->mnt_dir)+1); strcpy(name[i], mnt->mnt_dir); glist = g_list_append(glist, name[i]); i++; }; endmntent(fd); gtk_combo_set_popdown_strings(GTK_COMBO(panel.mounts), glist); return; }
glist = g_list_append(glist, mnt->mnt_dir);
g_list
funguje, ale takhle to jde a bez toho kopírování mi to nešlo (všecny položky byly stejné jako ta poslední).
g_list
ten string někam zkopíruje nebo jestli si jen zkopíruje pointer, jestli to po sobě ve druhém případě uklidí atd.?
while
zrušit pomocí free()
v cyklu? Ty proměnné už stejně nejsou potřeba, když hned o 3 řádky dál (return
) zaniknou...
gtk_combo_set_popdown_strings(GTK_COMBO(panel.mounts), glist);
mnt->mnt_dir_ent + 1
(ukončovací znak řetězce), takže mě nemůže překvapit žádný výstup z getmntent()
gchar **name; int names=256; ... name = (gchar **) malloc (sizeof(gchar*)*names); i = 0; while ((mnt = getmntent(fd))){ if (i == names) { names+=256; name = (gchar **) realloc (name, sizeof(gchar*)*names); } name[i] = (char*) malloc(strlen(mnt->mnt_dir)+1); strcpy(name[i], mnt->mnt_dir); glist = g_list_append(glist, name[i]); i++; }; ... free (name); /*uvolní seznam, ale nikoliv řetězce, které obsahuje */ return;(Teď ještě prosím kohokoliv, aby našel a opravil nějakou strašně pitomou chybu, kterou jsem v tom určitě udělal
p = malloc(); if (!p) abort();Nic moc, ale už testuju, jestli to nevrátilo NULL. Spokojenost?
while ((mnt = getmntent(fd))){ glist = g_list_append(glist, strdup(mnt->mnt_dir);); }; return;
strdup()
mě vůbec nenapadlo. Tím se vyřeší spousta problémů (třeba s tou dynamickou alokací). Jen doufám, že v tom nebude žádnej háček, jdu to vyzkoušet.
malloc()
náhodou nevrátil NULL
. To je mimochodem zrovna věc, která by byla v C++ podstatně jednodušší. Jinak doufám, že ten panel.mounts
se postará o řádné dealokování všech stringů, které jste mu předal.
Ten wrapper může třeba zobrazit zprávu, že program padnul na hubu, nebo vypsat nějakou smysluplnou hlášku a korektně ukončit program.Kde je něco o nějaké knihovně? Kde je něco o tom, že ten wrapper bude pro všechny programy?
void *my_malloc(...) { void *ret; if (!(ret = malloc(...))) { perror("Malloc se porouchal"); exit(1); } return ret; }A teď kousek v GTK+:
void *my_malloc(...) { void *ret; if (!(ret = malloc(...))) { show_error("Malloc se porouchal"); // zobrazi chybu gtk_main_quit(1); } return ret; }A ted mi rekni, co je na tom spatne.
prostě jen vím, že všechno co je v C je i v C++ a ještě mnohé navíc
já prostě nevidím ani jeden důvod, proč kdykoli nedat přednost C++ před C
ale tam, kde se používá C, tam bych to na 100% nahradil C++.ako sa hovori: afekt ako hovado. vas nazor nemam sancu zmenit ani trosku. praktickych ukazok je dost, uviedol som. to ze vy by ste to robili v C++ nic nemeni na ich kvalite. bodka. ked niekto vie robit v C, tak robi ked je mu to vyhodne - ale vy by ste pouzili C++. bodka. nema zmysel pokracovat.
já opravdu ještě neviděl projekt, kde by se víc hodilo C oproti C++to ale neznamena, ze to je objektivny nazor. a zjavne s nim vela ludi nesuhlasi, takze tak.
zatím jsem prostě nenašel praktický argument v čem je C lepšíano, vy by ste preferoval C++ aj na kernel. uz sa to opakuje. stacilo.
„Kdo z Vás do detailů umí celý bash?“Jeden můj kamarád.
/etc/mtab
/mnt/hda1
a tento adresář mám ve všech možných bookmarcích a v KDE na ploše.
Výměnná média se dají spolehlivě rozeznat podle typu filesystému
Jak?
/sys/block/*/removable
(proboha, hlavně neparsovat). Ale nevím, zda existuje nějaké univerzální API, nebo se to musí pro každý unix řešit jinak.
Kio to také nějak rozpoznají, takže jde jenom o to, zjistit jak sysfs
je Linux only, ne? Nebo bude i na BSD?
/media
(doufám, že se teď nestanu terčem útoků FHS-haters :-) ). Nebo že by se ze seznamu mounting pointů vyřadily ty, které jsou v /etc/fstab
a nemají tam noauto
?
Naopak na fstab bych moc nespoléhal (možná spíš mtab), protože ve spoustě moderních distribucí se tahle část systému o připojování hotplug výměnnejch médií nestará
To nijak neodporuje tomu, co jsem napsal: za pevná by se považovalo to, co je v /etc/fstab
a nemá to v parametrech noauto
. Ostatní - tedy i to, co v fstab
není vůbec - by bylo považováno za výměnné. Zdůrazňuji ale, že za vůbec nejlepší řešení považuji to, že by si uživatel sám vybral adresáře, které tam chce mít.
hal-find-by-capability --capability blockTo vypadá docela zajímavě. Jenom to moc nekamarádí s věcma, co hardware nejsou. Například NFS oddíly.
cp
). A nemusím přemýšlet, jestli je to zrovna /dev/sda1
, /dev/sdb1
, /dev/sdc1
nebo kýho výra. Prostě to chce odložit předsudky a zabývat se praktickou stránkou věci. Aneb "Image je nanic, poslouchej žízeň."
/dev/sda
je on), ve druhém ne. Kromě flashdisku mám ještě foťák a čtečku paměťových karet (která se chová jako tři samostatné diskové jednotky). Takže ono to není vždycky tak jednoduché.
/proc/bus/usb
moc často nelezu. Spíš jsem od toho čekal něco jako drives:/
v KDE.
Tiskni
Sdílej: