abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:22 | Komunita

    Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Zajímavý software

    Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.

    Ladislav Hagara | Komentářů: 1
    včera 14:00 | Zajímavý projekt

    Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.

    Pinhead | Komentářů: 4
    včera 02:22 | Zajímavý software

    Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.

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

    Byla vydána nová major verze 29.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Detailní přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 0
    13.5. 21:22 | Bezpečnostní upozornění

    Po zranitelnostech Copy Fail a Dirty Frag přichází zranitelnost Fragnesia. Další lokální eskalace práv na Linuxu. Zatím v upstreamu neopravena. Přiřazeno ji bylo CVE-2026-46300.

    Ladislav Hagara | Komentářů: 1
    13.5. 14:00 | Komunita

    Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří KDE částkou 1 285 200 eur.

    Ladislav Hagara | Komentářů: 7
    13.5. 12:55 | IT novinky

    Google na včerejší akci The Android Show | I/O Edition 2026 (YouTube) představil celou řadu novinek: Gemini Intelligence, notebooky Googlebook, novou generaci Android Auto, …

    Ladislav Hagara | Komentářů: 0
    13.5. 12:33 | IT novinky

    Evropská komise by do léta mohla předložit návrh normy omezující používání sociálních sítí dětmi v zájmu jejich bezpečí na internetu. Prohlásila to včera předsedkyně EK Ursula von der Leyenová, podle níž řada zemí Evropské unie volá po zavedení věkové hranice pro sociální sítě. EU částečně řeší bezpečnost dětí v digitálním prostředí v již platném nařízení o digitálních službách (DSA), podle německé političky to však není dostatečné a

    … více »
    Ladislav Hagara | Komentářů: 48
    13.5. 04:11 | Nová verze

    Multiplatformní open source aplikace scrcpy (Wikipedie) pro zrcadlení připojeného zařízení se systémem Android na desktopu a umožňující ovládání tohoto zařízení z desktopu, byla vydána v nové verzi 4.0.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (25%)
    Celkem 1615 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: C - procházení souborů

    15.7.2021 07:45 PA
    C - procházení souborů
    Přečteno: 899×
    Ahoj,

    reším problém, jak v C jednoduše vylistovat a získat názvy soubodů v adresáři a podadresářích.

    Díky za rady.

    PA

    Řešení dotazu:


    Odpovědi

    15.7.2021 08:36 X
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Řešení 1× (Andrej)
    15.7.2021 09:01 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Podla C standardu je to opendir(), readdir() a closedir().
    debian.plus@protonmail.com
    15.7.2021 18:56 10minuteman
    Rozbalit Rozbalit vše Re: C - procházení souborů
    To není C standard, to je POSIX standard.

    Pokud má OP POSIX, tak OK, jinak může zkusit něco jako TinyDir.
    15.7.2021 19:56 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Máš pravdu, POSIX.
    debian.plus@protonmail.com
    15.7.2021 19:58 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C - procházení souborů
    A použi rekurziu.
    debian.plus@protonmail.com
    18.7.2021 18:54 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Pokud nebude mít velké stack framy té funkce, která prochází. Vzhledem k tomu, že tazatel nespecifikuje hloubku adresářového stromu, by mu to mohlo padat na přetečení zásobníku. „Univerzálnější“ je prohledávat FS do hloubky bez rekurze: dokud zásobník Z (datová struktura na haldě) cest k adresářům není prázdný, opakuj: vezmi ze Z prvek (cestu k adresáři), vypiš všechny soubory v ní a přidej všechny cesty k podadresářům na Z.

    (Tuším tady úkol.)
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    18.7.2021 23:32 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Rekurze bývá implementována zásobníkem. Není tedy důvod k nepoužívání rekurze.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    19.7.2021 18:27 10minuteman
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Zásobník je omezený shora, zatímco hloubka podobné iterace bývá nedeterminovaná/telná, takže to může přetéct. Z toho důvodu se například v C++ nedoporučuje binární strom implementovaný pomocí unique_ptr mazat tak, že smažu kořen.
    19.7.2021 18:32 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: C - procházení souborů
    O jaké hloubce se tady bavíme? Jednotky, tisíce nebo milióny zanoření podadresářů?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    19.7.2021 22:31 10minuteman
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Záleží na velikosti stack framu.

    Většinou je to samozřejmě jedno, ale je fajn mít to na paměti.
    1.8.2021 13:59 rotator
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Hmm, to s tím uvolňováním stromu C++ by mě nenapadlo a říkám si, že kdybych na to někdy narazil, tak se to bude obtížně ladit... díky za radu!
    19.7.2021 11:12 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C - procházení souborů
    No, je dalsia moznost. A to pouzit inline rekurziu. Lahko citatelny kod pre pouzivatela a optimalizovany kod pre hardver, s minimimom ukladanych dat. ;)

    Ved rekurziu si napis tak, ze pomocne data budu pouzivat haldu a nie stack.

    Pripadne cez goto.

    V Linuxe nie je problem zo stackom pri Intel/AMD pouzitom ako bezne PC, lebo ak je maly stack, da sa prealakovat a bude vacsi.
    debian.plus@protonmail.com
    21.7.2021 09:05 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: C - procházení souborů
    V Linuxe nie je problem zo stackom pri Intel/AMD pouzitom ako bezne PC, lebo ak je maly stack, da sa prealakovat a bude vacsi. V Linuxe nie je problem zo stackom pri Intel/AMD pouzitom ako bezne PC, lebo ak je maly stack, da sa prealakovat a bude vacsi.
    Toto nie je pravda. Da sa iba zmenit velkost pred spustenim (pripadne bez limitu).
    debian.plus@protonmail.com
    24.7.2021 09:47 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: C - procházení souborů
    To není možné si zaalokovat paměť a tam nastavit esp/rsp a ebp/rbp? Nikdy jsem to nezkoušel, ale myslím si, že by to mělo fungovat.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    24.7.2021 10:20 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: C - procházení souborů
    Tak jsem to zkusil. Zde je kód pro x86_64:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define CHARS 1024
    
    long int
    move_stack(void *stack_bot, void (*jmp_addr)(void));
    
    void
    function_in_new_stack(void)
    {
    	long int foo;
    	char string[CHARS];
    
    	for (char *ch = string + CHARS; ch >= string; ch--) {
    		*ch = 'A';
    	}
    
    	puts(string);
    
    	printf("Cur. stack ptr: 0x%lx\n", (size_t) &foo);
    }
    
    int
    main(int argc, char **argv)
    {
    	long int foo;
    	void *stack, *stack_bot;
    
    	printf("Cur. stack ptr: 0x%lx\n", (size_t) &foo);
    
    	stack = malloc(4096);
    	stack_bot = stack + 4096;
    
    	printf("New stack addr.: 0x%lx\n", (size_t) stack);
    	printf("New stack bottom: 0x%lx\n", (size_t) stack_bot);
    
    	puts("Moving to the new stack.");
    
    	foo = move_stack(stack_bot, &function_in_new_stack);
    
    	printf("Function worked: 0x%lx %c\n", foo, foo);
    	printf("Cur. stack ptr: 0x%lx\n", (size_t) &foo);
    
    	puts("Freeing the stack.");
    	free(stack);
    }
    .globl move_stack
    move_stack:
    	/* Tyto registry zachováváme. */
    	pushq %rbx
    	pushq %r12
    	pushq %r13
    	pushq %r14
    	pushq %r15
    
    	/* V %rdi je spodek nového stacku, v %rsi funkce k zavolání. */
    
    	/* Poznamenáme si starou adresu stacku. */
    	mov %rsp, %rbx
    
    	/* Přejdeme do nového stacku. */
    	movq %rdi, %rsp
    
    	/* Adresu uložíme na nový stack. */
    	pushq %rbx
    
    	call %rsi
    
    	/* Vrátíme se zpět. */
    	popq %rsp
    
    	/* Uklidíme po sobě. */
    	popq %r15
    	popq %r14
    	popq %r13
    	popq %r12
    	popq %rbx
    
    	/* Vrátíme 'Y' jako návratovou hodnotu. */
    	movq $0x59, %rax
    
    	ret
    
    Funkce move_stack zavolá funkci s daným stackem. Funguje to – viz výstup. Pokud nastavím CHARS na příliš velkou hodnotu (nový stack má 4k), spadne to na SIGSEGV, takže se používá nový stack.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    MakeIranBombedAgain❗ avatar 21.7.2021 12:12 MakeIranBombedAgain❗ | skóre: 42 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
    Rozbalit Rozbalit vše Re: C - procházení souborů

    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.