Bylo oznámeno vydání Fedora Linuxu 43. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách Fedora Magazinu: Fedora Workstation, Fedora KDE Plasma Desktop, Fedora Silverblue a Fedora Atomic Desktops.
Elon Musk oznámil (𝕏) spuštění internetové encyklopedie Grokipedia (Wikipedia). Zatím ve verzi 0.1. Verze 1.0 prý bude 10x lepší, ale i ve verzi 0.1 je podle Elona Muska již lepší než Wikipedia.
PSF (Python Software Foundation) po mnoha měsících práce získala grant ve výši 1,5 milionu dolarů od americké vládní NSF (National Science Foundation) v rámci programu "Bezpečnost, ochrana a soukromí open source ekosystémů" na zvýšení bezpečnosti Pythonu a PyPI. PSF ale nesouhlasí s předloženou podmínkou grantu, že během trvání finanční podpory nebude žádným způsobem podporovat diverzitu, rovnost a inkluzi (DEI). PSF má diverzitu přímo ve svém poslání (Mission) a proto grant odmítla.
Balík nástrojů Rust Coreutils / uutils coreutils, tj. nástrojů z GNU Coreutils napsaných v programovacím jazyce Rust, byl vydán ve verzi 0.3.0. Z 634 testů kompatibility Rust Coreutils s GNU Coreutils bylo úspěšných 532, tj. 83,91 %. V Ubuntu 25.10 se již používá Rust Coreutils místo GNU Coreutils, což může přinášet problémy, viz například nefunkční automatická aktualizace.
Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.
Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.
Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.
Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.
Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.
$ cd icedtea6-1.2/openjdk/jdk/src $ du -ah linux/ | tail -n 1 1,4M linux/ $ du -ah solaris/ | tail -n 1 15M solaris/ du -ah windows/ | tail -n 1 6,2M windows/ $ ls windows/ solaris/ solaris/: back bin classes demo doc hpi instrument javavm lib native npt sample transport windows/: back bin classes demo hpi instrument javavm lib native npt resource transport $ ls -1 windows/native/sun/windows/*FileDialog* windows/native/sun/windows/awt_FileDialog.cpp windows/native/sun/windows/awt_FileDialog.h $ ls linux/ docOn totiž Linuxový desktop nebyl nikdy pro Sun zajímavý. * ve zdrojácích openjdk se nevyznám, takže je možné, že ukazuji něco jiného.
Aby se vyhnuli komplikacím s GnomeVFS pod KDE, tak prece muzou rozlisit, v jakem prostredi jsou a podle toho zobrazit dialog...
KIO ani GnomeVFS v soucasne dobe neumozunuji zadny non-GUI pristup pres API ci alespon pouhou commandlajnu?GIO/GVFS by to mělo umět (dokonce se pracuje na mostu KIO-GIO), ale je to zatím poměrně čerstvá záležitost.
Standardní implementace Javy totiž neřeší to, že při ukládání můžu vybrat existující soubor. Ten pak bez varování přepíšu.Co by na tom měla řešit Java? To je věc programátora, aby ošetřil, co se má stát, když uživatel vybere existující soubor. Jinak k tomu dialogu – když někdo ve swingové aplikaci nepoužívá nativní swingový dialog, dobře mu tak
Pro swingovou aplikaci je nativní swingový dialog, ne žádný jiný. Je to jako kdybyste chtěl, aby KDE aplikace používala „nativní“ GTK+ dialog jenom proto, že svůj systém považujete za postavený na GTK. Ano, někdo takové věci chce, ale není mi jasné, v čem je souborový dialog tak extra, a proč někdo nepožaduje „nativní“ (ve „svém“ toolkitu) menu, tlačítka, okna…
Vždyť se podívejte, jak vypadá. Ani na jedné z platforem není nativní. Chová se jinak, vypadá jinak. Mým cílem je, aby aplikace co nejvíce zapadala do systému. Na ideologii Swingu v tomto případě kašlu, protože ten mě v tomto směru zklamal.
Nativní dialog není extra v ničem. Naopak, mohl byste argumentovat tím,že postrádá spoustu funkcí z JFileChooseru. Jenže vypadá a chová se jako doma - teda až na ten Linuxový
. Jak jste si mohl všimnout, tak nativní dialog na Macu ukazuje všechny disky, vzdálené počítače, apod. Nativní dialog na Windows ukazuje to, na co jsou uživatelé z Windows zvyklí. A co ukazuje swingový JFileChooser? Představu Sunu o filedialogu. Na to ale není nikdo zvědavý
Mým cílem je, aby aplikace co nejvíce zapadala do systému.V tom případě na to jdeš špatně. Piš tak, aby byla aplikační logika nezávislá na toolkitu a pro každou platformu si napiš vrstvu, která obsluhuje potřebný toolkit aktuální platformy.
No, Java to evidentně neřeší, ale mám dojem, že například takový AppKit tohle dělá automaticky.No, to musí být nádhera. A že jsem tak smělý, co dělá automaticky? Dotáže se uživatele, přepíše soubor, nedovolí přepsat soubor, vytvoří záložní kopii souboru, smaže soubor, vyhodí výjimku, zastřelí obsluhu…?
Nativní swingový dialog? To je vtip, ne?Platforma pro swingovou aplikaci je swing. Do swingové aplikace zapadne jedině souborový dialog se swingovým L&F, nativní dialog operačního systému nebo desktopového prostředí bude v takové aplikaci cizí.Vždyť se podívejte, jak vypadá. Ani na jedné z platforem není nativní.
Dotáže se uživatele?Ano, stejně jako každý jiný file dialog v systému.
NSSavePanel *sp = [NSSavePanel savePanel];
[sp setRequiredFileType:@"txt"];
[sp beginSheetForDirectory:NSHomeDirectory() file:nil modalForWindow:parentWindow modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:nil];
Tento kousek kódu vám zajistí, že omylem nepřepíšete soubor a že bude mít příponu txt. Proč bych proboha měl psát kód, který bude hlídat, zda soubor neexistuje a potom ručně vytvářet nějaký chybový dialog?
Platforma pro swingovou aplikaci je swing. Do swingové aplikace zapadne jedině souborový dialog se swingovým L&FŠpatně si rozumíme. Já tvořím aplikaci, která používá knihovnu Swing a systémový look and feel. Proto vypadá (až na jednu výjimku) NAPROSTO shodně jako nativní aplikace. Systémové integraci na Esmsce jsem věnoval spoustu času, takže vím o čem mluvím. Dialog, který poskytuje JFileChooser je na Macu cizí. Nezapadá tam a nereaguje na běžné klávesové zkratky. Je totiž navržený Sunem a Apple jej chtě-nechtě musel převzat. Zato FileDialog je plně v kompetenci Applu - má systémový vzhled, reaguje na systémové zkratky a rozvržení komponent naprosto přesně odpovídá zvyklostem daného OS. Podívejte se prosím na screenshot a srovnejte si to s tím "výtvorem" od Sunu. Pakliže tvrdíte, že by uživatel měl být spokojený s JFileChooserem, tak vás musím ubezpečit, že ne. Alespoň ne na Macu, kde každá aplikace přísně dodržuje HIG. Howg
ale není mi jasné, v čem je souborový dialog tak extra, a proč někdo nepožaduje „nativní“ (ve „svém“ toolkitu) menu, tlačítka, okna…Ne typicky některé dialogy nabízejí hromadu funkčnosti, jako záložky, náhledy a spol, zatímco ručně dělané obvykle ne. Rozhodně stejný Look and Feel aplikací prostě přispívá k dobrému dojmu z desktopu.
Ne typicky některé dialogy nabízejí hromadu funkčnosti, jako záložky, náhledy a spol, zatímco ručně dělané obvykle ne.Což ale záleží na konkrétní implementaci – a zrovna souborový dialog GTK 1 tedy nad swingovských dialogem zrovna nevyniká. A swing není jen tak ledajaký toolkit, aby u něj člověk předpokládal špatný souborový dialog. A pokud je špatný, má se udělat lepší, ne si jej půjčovat z jiného toolkitu. Napadlo by snad někoho tvrdit, že GTK má divně udělaná menu, a mělo by je raději dělat pomocí Qt?
Rozhodně stejný Look and Feel aplikací prostě přispívá k dobrému dojmu z desktopu.Pokud bude aplikace mít swingovský L&F, rozhodně do ní nezapadne souborový dialog nějakého cizího toolkitu. A že by takový dialog zachránil dojem z celého desktopu, když zbytek aplikace bude jiný…
Co by na tom měla řešit Java? To je věc programátora, aby ošetřil, co se má stát, když uživatel vybere existující soubor.To by měla řešit třída představující ten dialog... je to tak jinde obvyklé.
Uživatel vybere v souborovém dialogu existující soubor a má se dít co?Má se zeptat uživatele. Je to lepší, než kdyby dialog zmizel, ukázal se warning, uživatel to odmítl a file dialog se zase objevil.
protože aplikace si stejně musí existenci či neexistenci souboru ověřit a musí stejně adekvátním způsobem zareagovatNení mi jasné, proč by si aplikace měla existenci či neexistenci nějak ověřovat. Té už je to jedno, ta prostě začne zapisovat, ať tam soubor je, nebo není.
Pokud programátor není úplné nemehlo, naprogramuje to tak, že se messagebox se zprávou zobrazí přes souborový dialog. A třeba navrhne uživateli nový název souboru. Nebo mu navrhne starý soubor přejmenovat. Jak má autor toolkitu vědět, co z toho bude zrovna programátor chtít?Uživatel vybere v souborovém dialogu existující soubor a má se dít co?Má se zeptat uživatele. Je to lepší, než kdyby dialog zmizel, ukázal se warning, uživatel to odmítl a file dialog se zase objevil.
Takže uživatel zadá název souboru, dialog zjistí, že neexistuje, mezi tím soubor vznikne a pak do něj aplikace začne zapisovat, protože má zprávu od dialogu, že soubor neexistuje. To je taky dobrej nápadprotože aplikace si stejně musí existenci či neexistenci souboru ověřit a musí stejně adekvátním způsobem zareagovatNení mi jasné, proč by si aplikace měla existenci či neexistenci nějak ověřovat. Té už je to jedno, ta prostě začne zapisovat, ať tam soubor je, nebo není.
Pokud programátor není úplné nemehlo, naprogramuje to tak, že se messagebox se zprávou zobrazí přes souborový dialog.Naprosto zbytečná komplikace.
mezi tím soubor vznikne a pak do něj aplikace začne zapisovat, protože má zprávu od dialogu, že soubor neexistujeA proč by měl ten soubor vznikat? Tohle není serverová aplikace nebo kdovíco, tohle slouží třeba jako dialog pro uložení dokumentu. Není důvod, proč by měl během té sekundy ten soubor magicky vzniknout.
Co je na tom komplikovaného? A proč má aplikace nutit uživatele zadat nový název, když třeba dokáže sama navrhnout vhodnou alternativu? Proč má nejprve uživatele otravovat jedním dialogem, že zadaný soubor existuje, a pak dalším, když potřebuje vytvořit odvozené názvy (jako třeba ukládání stránky z prohlížeče do .html + adresář s rekvizitami, nebo balení do vícemédiového zipu)?Pokud programátor není úplné nemehlo, naprogramuje to tak, že se messagebox se zprávou zobrazí přes souborový dialog.Naprosto zbytečná komplikace.
Není důvod, proč by měl během té sekundy ten soubor magicky vzniknout.Taky není důvod, proč by měl někdo do HTML formuláře pro SQL dotaz psát uvozovky, proč by se mělo jedno vlákno zastavit a druhé rozběhnout zrovna v tomhle okamžiku, proč by někdo poslal tak velký blok dat – jo jo, takových „není důvod, proč“ už jsem slyšel…
Co je na tom komplikovaného? A proč má aplikace nutit uživatele zadat nový název, když třeba dokáže sama navrhnout vhodnou alternativu?To má aplikace tipovat, jak to pojmenovat? No když už takové harakiri, tak si prostě může tu danou funkci filedialogu vynout a je to.
Taky není důvod, proč by měl někdo do HTML formuláře pro SQL dotaz psát uvozovky, proč by se mělo jedno vlákno zastavit a druhé rozběhnout zrovna v tomhle okamžiku, proč by někdo poslal tak velký blok dat – jo jo, takových „není důvod, proč“ už jsem slyšel…V životě jsem neviděl program, který by používal file dialog, ale vykašlal se na jeho funkci ověřování existence souboru a celou operaci, která má normálně tak 3 řádky, komplikoval kvůli tomu, že během 1 milisekundy by se v tom samém adresáři (třeba Dokumenty) mohl čistě znenadání objevit soubor se stejným názvem...
V životě jsem neviděl program, který by používal file dialog, ale vykašlal se na jeho funkci ověřování existence souboru a celou operaci, která má normálně tak 3 řádky, komplikoval kvůli tomu, že během 1 milisekundy by se v tom samém adresáři (třeba Dokumenty) mohl čistě znenadání objevit soubor se stejným názvem...Podle toho ty programy vypadají
Jinak ta operace s testem, zda se podařilo soubor nově vytvořit, zabere asi tak jeden řádek navíc, takže to je opravdu komplikace…
Pokud program bez ptaní přepíše nějaký soubor, není to chyba?Kdybych měl v programech na každém Xtém řádku kontrolovat, jestli se třeba nezměnila velikost souboru, tak má FatRat velikost a rychlost skoro jako OpenOffice.org. Pokud se tam ten soubor objeví mezi stisknutím OK v dialogu a otevřením souboru, tak je to jen blbost uživatelů. Tohle by se mohlo stát jen kdyby šlo o síťový disk a dva lidé dostal nápad uložit soubor se stejným názvem ve stejnou milisekundu.
Takže pokud programátor neotestuje návratovou hodnotu a bude spoléhat, že se soubor vytvořit podařilo, může se stát, že jenom přepíše existující soubor, ale také se může stát, že se vůbec žádný soubor nevytvořilTo je ale blbost! Pokud už existuje, tak návratová hodnota přece řekne, že je vše OK!
Pokud se tam ten soubor objeví mezi stisknutím OK v dialogu a otevřením souboru, tak je to jen blbost uživatelů. Tohle by se mohlo stát jen kdyby šlo o síťový disk a dva lidé dostal nápad uložit soubor se stejným názvem ve stejnou milisekundu.Na lokálním počítači se to může stát třeba tak, že počítač je z nějakého důvodu vytížen, GUI reaguje pomalu a uživatel sám zvolí dvakrát akci uložit a nepozná, ve kterém dialogu zrovna je.
Kdybych měl v programech na každém Xtém řádku kontrolovat, jestli se třeba nezměnila velikost souboru, tak má FatRat velikost a rychlost skoro jako OpenOffice.org.Stačí na jednom řádku otestovaná návratovou hodnotu funkce vytvářející soubor. Ignorovat, že se nepodařilo vytvořit soubor, není podle mne dobrý nápad. Když tu chybu ignorovat nebudu, musím stejně uživateli zobrazit hlášku, a v případě existujícího souboru mu nabídnout soubor přepsat. Aby se ten dotaz nezobrazil 2× pokaždé trochu jinak, musel bych stejně příslušnou funkci v souborovém dialogu vypnout. Takže by v API mohla být příslušná metoda, ale u ní by musel být komentář: „tuto metodu v žádném případě nepoužívejte“.
To je ale blbost! Pokud už existuje, tak návratová hodnota přece řekne, že je vše OK!JavaDoc říká něco jiného:
trueif the named file does not exist and was successfully created;falseif the named file already exists
QFile file;
QString fname;
fname = QFileDialog::getSaveFileName(); // [1]
file.setFileName(fname);
if(!file.open(QIODevice::WriteOnly)) // [2]
{
// ošetřit selhání: filesystem readonly, práva, etc...
}
Ty mi tvrdíš, že se mezi [1] a [2] zčistajasna ten soubor fname objeví na disku od někoho jiného. To se na desktopu stane asi těžko a na síti by to asi bylo bordelem na síťových discích (a uživatelé si pak problém zaslouží).
Nedá se zapisovat není příčina, ale důsledek. Jak jsem říkal: průměrný software ohlásí nelze zapisovat, dobrý software řekne nelze zapisovat, na disku není místo, nebo nelze zapisovat, nemáš práva, atd. (Podprůměrný software pak spadne a ten špatný se bude tvářit, že se nic neděje, a přitom nezapíše ani bajt
)
Granularita řešení chyb je samozřejmě designové rozhodnutí a není nic špatného na tom být průměrný (zvlášť když z hlediska normálního průběhu věcí jsem výborný); někteří ale opravdu jdou až tak daleko, že se snaží chovat se rozumně i ve chvíli, kdy dojde paměť (zase ten Altap).
I tak ten soubor může mezi ověřením a otevřením vzniknout... teoreticky.Pokud knihovna (jako např JRE) zaručuje, že vytvoření souboru bude atomické, pak opravdu jen teoreticky.
Pokud programátor není úplné nemehlo, naprogramuje to tak, že se messagebox se zprávou zobrazí přes souborový dialog. A třeba navrhne uživateli nový název souboru. Nebo mu navrhne starý soubor přejmenovat. Jak má autor toolkitu vědět, co z toho bude zrovna programátor chtít?Uvažoval jste někdy nad tím, že chování file dialogů by mělo být konzistentní? Uživatel je upozorněn standardním způsobem, že soubor již existuje. Pokud bude soubor chtít přesto přepsat, přepíše si jej. Pokud ho bude chtít přejmenovat, přejmenuje si jej. Nechápu, proč by mu progam měl navrhovat nějaké jiné jméno. Copak vidíte uživatelovi do hlavy, jakou má představu o pojmenovávání souborů? Takováto "umělá inteligence" je jedním z důvodů, proč nepoužívám rád Windows. Snaží se totiž myslet za mě...
Takže uživatel zadá název souboru, dialog zjistí, že neexistuje, mezi tím soubor vznikne a pak do něj aplikace začne zapisovat, protože má zprávu od dialogu, že soubor neexistuje. To je taky dobrej nápadNebuďte paranoidní. Krom toho, v momentě, kdy má uživatel zobrazený dialog, tak ten automaticky zobrazuje veškeré změny. Pokud tedy ve složce mezitím vznikne soubor, dialog ho okamžitě zobrazí. Nevím jak na ostatních systémech, ale na Macu rozhodně. Výhoda HFS+
Uvažoval jste někdy nad tím, že chování file dialogů by mělo být konzistentní? Uživatel je upozorněn standardním způsobem, že soubor již existuje. Pokud bude soubor chtít přesto přepsat, přepíše si jej. Pokud ho bude chtít přejmenovat, přejmenuje si jej. Nechápu, proč by mu progam měl navrhovat nějaké jiné jméno. Copak vidíte uživatelovi do hlavy, jakou má představu o pojmenovávání souborů?Vyzkoušejte si někdy pár webových prohlížečů a download manažerů. Jak se chová spousta z nich? Vezmou jméno stahovaného souboru, zjistí, zda takový soubor již neexistuje, a pokud ano, vytvoří odvozený název – třeba přidají číslo. To je ale podle vás nekonzistentní chování. Vždyť si uživatel to číslo může klidně dopsat sám, prohlédne si adresář, zjistí jaké je nejvyšší číslo a přidá jedničku. Proč by to za něj měl dělat počítač, že, aspoň si uživatel procvičí matiku…
Nebuďte paranoidní. Krom toho, v momentě, kdy má uživatel zobrazený dialog, tak ten automaticky zobrazuje veškeré změny. Pokud tedy ve složce mezitím vznikne soubor, dialog ho okamžitě zobrazí. Nevím jak na ostatních systémech, ale na Macu rozhodně. Výhoda HFS+Jak se dialog dozví o změně, když ta složka je třeba na vzdáleném serveru připojená přes FTP? A zobrazení změny v dialogu je celkem na nic, když už uživatel ten dialog zavřel a soubor vznikne až pak…
Vyzkoušejte si někdy pár webových prohlížečů a download manažerů. Jak se chová spousta z nich? Vezmou jméno stahovaného souboru, zjistí, zda takový soubor již neexistuje, a pokud ano, vytvoří odvozený název – třeba přidají číslo. To je ale podle vás nekonzistentní chování. Vždyť si uživatel to číslo může klidně dopsat sám, prohlédne si adresář, zjistí jaké je nejvyšší číslo a přidá jedničku. Proč by to za něj měl dělat počítač, že, aspoň si uživatel procvičí matiku…Ale ne. Špatně mě chápete. Safari při ukládání má dva módy: první (pro BFU) je ten, že mu prostě řeknete, ať soubor uloží. On se na nic neptá a rovnou jej začne stahovat do složky ~/Downloads. Pokud tam takový soubor existuje, přidá za jeho název pomlčku a číslo o jedna vyšší. Pokud chcete explicitně určit kam a jak se soubor uloží, zobrazí se vám dialog. Pokud kliknete na soubor, který existuje, pak se vás zeptá, jestli ho chcete přepsat a zkontroluje jeho příponu. Webový prohlížeč, stahovač torrentů, Adobe Lightroom, Pages, .... Všechny tyto programy jsou rozdílné, ale ctí jednu zásadu: nevymýšlí nesmysly. Chovají se inteligentně a mají unifikované chování.
Jak se dialog dozví o změně, když ta složka je třeba na vzdáleném serveru připojená přes FTP? A zobrazení změny v dialogu je celkem na nic, když už uživatel ten dialog zavřel a soubor vznikne až pak…V případě ukládání na FTP se dialog pochopitelně o změně nemusí dozvědět. Nevím, nezkoušel jsem. Vymýšlíte ale už opravdu paranoidní případy, nemůžu si pomoct. Krom toho, nejsem si vědom, že by zrovna toto Java nebo Cocoa framework nějak extra obsluhovaly. O Javě bych velmi pochyboval, v tomto směru je vcelku primitivní (až místy stupidní), Cocoa netuším. Zas tak dobře zatím tento framework neznám a nerad bych šířil nesmyly. Přece jenom, je tu pár Macařů, kteří by se mi pak mohli smát
Vymýšlíte ale už opravdu paranoidní případy, nemůžu si pomoct.Aplikace, která předpokládá, že všechno bude ideální, špatně dopadne.
Krom toho, nejsem si vědom, že by zrovna toto Java nebo Cocoa framework nějak extra obsluhovaly.Co by na tom měly obsluhovat? Mám připojený nějaký vzdálený systém třeba přes FUSE (třeba
sshfs), vzdálený systém neumožňuje oznamovat změny, tím pádem se o změnách nedozví ani FUSE, tedy ani systém, takže se o tom nedozví ani žádný uživatelský program.
Pořád uvádím jenom pár příkladů, co se může stát. Každopádně aplikace, která si vytvoří nový soubor, zapíše do něj a zavře jej, a během těchhle operací si vůbec nekontroluje návratové hodnoty a to, jestli operace proběhla, skončí v lepším případě nějakou výjimkou, v horším případě případě vypíše „soubor uložen“, ale soubor nebude nikde. Pokud by souborový dialog chtěl usnadnit programátorovi práci s nejčastějším případem, může volitelně při zadání jména existujícího souboru položit uživateli dotaz, zda se má soubor přepsat – pak ten souborový dialog ale musí zajistit i vytvoření souboru a aplikaci předat deskriptor vytvořeného a otevřeného souboru. Jinak přímo vede programátora k tomu, aby ignoroval ošetření nestandardních stavů.
Nebuďte paranoidní. Krom toho, v momentě, kdy má uživatel zobrazený dialog, tak ten automaticky zobrazuje veškeré změny. Pokud tedy ve složce mezitím vznikne soubor, dialog ho okamžitě zobrazí. Nevím jak na ostatních systémech, ale na Macu rozhodně. Výhoda HFS+To není žádná paranoia. Tohle je zcela běžný příklad bezpečností chyby, kterou se straší všichni, co zapisují do /tmp. Jediné řešení je stylu
fd=open(filename, O_WRONLY|O_CREAT|O_EXCL, mode); s následnou kontrolou, jak to dopadlo (fd!=-1).
Pokud chce toolkit řešit existující soubor, tak takto se smyčkou přes errno==EEXIST a aplikaci musí (vedle názvu souboru) vrátit otevřený deskriptor a aplikace musí s tímto souborem manipulovat jen přes tento deskriptor.
Tiskni
Sdílej: