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 22:22 | Komunita

    Open source webový aplikační framework Django slaví 20. narozeniny.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | Komunita

    V Brestu dnes začala konference vývojářů a uživatelů linuxové distribuce Debian DebConf25. Na programu je řada zajímavých přednášek. Sledovat je lze online.

    Ladislav Hagara | Komentářů: 0
    včera 11:33 | IT novinky

    Před 30 lety, tj. 14. července 1995, se začala používat přípona .mp3 pro soubory s hudbou komprimovanou pomocí MPEG-2 Audio Layer 3.

    Ladislav Hagara | Komentářů: 15
    včera 10:55 | IT novinky

    Výroba 8bitových domácích počítačů Commodore 64 byla ukončena v dubnu 1994. Po více než 30 letech byl představen nový oficiální Commodore 64 Ultimate (YouTube). S deskou postavenou na FPGA. Ve 3 edicích v ceně od 299 dolarů a plánovaným dodáním v říjnu a listopadu letošního roku.

    Ladislav Hagara | Komentářů: 16
    13.7. 17:55 | Zajímavý projekt

    Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.

    Ladislav Hagara | Komentářů: 11
    11.7. 16:44 | Komunita

    Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.

    Ladislav Hagara | Komentářů: 3
    11.7. 14:55 | Humor

    McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.

    Ladislav Hagara | Komentářů: 16
    11.7. 00:11 | Nová verze

    Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

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

    Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 4
    10.7. 15:22 | Nová verze

    Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.

    Ladislav Hagara | Komentářů: 12
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (26%)
     (7%)
     (3%)
     (1%)
     (1%)
     (4%)
    Celkem 393 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: C - procházení souborů

    15.7.2021 07:45 PA
    C - procházení souborů
    Přečteno: 871×
    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: 45 | 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: 45 | 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.
    Gréta avatar 21.7.2021 12:12 Gréta | skóre: 37 | 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.