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í
×
    dnes 21:11 | Nová verze

    Byla vydána verze 1.94.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example. Zveřejněny byly výsledky průzkumu mezi vývojáři v programovacím jazyce Rust: 2025 State of Rust Survey Results.

    Ladislav Hagara | Komentářů: 0
    dnes 17:33 | Komunita

    Google zveřejnil seznam 185 organizací přijatých do letošního Google Summer of Code (GSoC). Dle plánu se zájemci přihlašují od 16. do 31. března. Vydělat si mohou od 750 do 6600 dolarů. V Česku a na Slovensku je to 900 dolarů za malý, 1800 dolarů za střední a 3600 dolarů za velký projekt. Další informace v často kladených otázkách (FAQ). K dispozici jsou také statistiky z minulých let.

    Ladislav Hagara | Komentářů: 0
    včera 22:55 | Nová verze

    Byla vydána únorová aktualizace aneb nová verze 1.110 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.110 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 8
    včera 18:11 | IT novinky

    Apple představil 13palcový MacBook Neo s čipem A18 Pro. V základní konfiguraci za 16 990 Kč.

    Ladislav Hagara | Komentářů: 43
    včera 12:22 | Komunita

    Kalifornský zákon AB 1043 platný od 1. ledna 2027 vyžaduje, aby operační systémy požadovaly po uživatelích věk nebo datum narození a skrze API poskytovaly aplikacím informaci, zda je uživatel mladší 13 let, má 13 až 16 let, má 16 až 18 let nebo má alespoň 18 let. Vývojáři linuxových distribucí řeší, co s tím (Ubuntu, Fedora, …).

    Ladislav Hagara | Komentářů: 85
    včera 11:44 | Pozvánky

    Konference LinuxDays 2026 proběhne o víkendu 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Čekají vás desítky přednášek, workshopy, stánky a setkání se spoustou chytrých lidí.

    Petr Krčmář | Komentářů: 0
    včera 00:44 | Humor

    Nové verze webových prohlížečů Chrome a Firefox jsou vydávány každé 4 týdny. Aktuální verze Chrome je 145. Aktuální verze Firefoxu je 148. Od září přejde Chrome na dvoutýdenní cyklus vydávání. V kterém týdnu bude mít Chrome větší číslo verze než Firefox? 😀

    Ladislav Hagara | Komentářů: 4
    3.3. 21:55 | IT novinky Ladislav Hagara | Komentářů: 4
    3.3. 13:44 | Komunita

    Bylo spuštěno hlasování o přednáškách a workshopech pro letošní Installfest, jenž proběhne o víkendu 28. a 29. března v Praze na Karlově náměstí 13.

    Ladislav Hagara | Komentářů: 4
    3.3. 04:33 | Nová verze

    Byla vydána (Mastodon, 𝕏) třetí RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (7%)
     (0%)
     (11%)
     (28%)
     (2%)
     (5%)
     (1%)
     (13%)
     (25%)
    Celkem 1017 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: SIGSEGV pri kopirovani souboru pomoci fopen

    tomes.io avatar 5.1.2014 17:16 tomes.io | skóre: 12 | blog: tomesh
    SIGSEGV pri kopirovani souboru pomoci fopen
    Přečteno: 264×
    Napsal jsem si fci pro kopirovani vsech typu souboru. Kopiruji tedy binarne pomoci fopen. Nasledujici fce pracuje vetsinu casu spravne, ale obcas mi spadne se SIGSEGV a valgrind hlasi:
    Access not within mapped region at address 0x0
    ==26680==    at 0x3BD606CD90: fwrite (in /usr/lib64/libc-2.17.so)
    
    Je mozne, ze se nekdy nejak nekorektne otevre soubor pro psani? Premyslim, v cem to muze byt. Lze kod nejak osetrit tak, aby to bylo vzdy korektni?

    void send_file(char *source, char *destination) {
        FILE * filer, * filew;
        int numr, numw;
        char buffer[1024];
    
        if ((filer = fopen(source, "rb")) == NULL) {
            perror("open read file error.\n");
            //exit(1);
        }
    
        if ((filew = fopen(destination, "wb")) == NULL) {
            perror("open write file error.\n");
            //exit(1);
        }
    
        while (feof(filer) == 0) {
    
            if ((numr = fread(buffer, 1, 100, filer)) != 100) {
    
                if (ferror(filer) != 0) {
                    perror("read file error.\n");
                    //exit(1);
                } else if (feof(filer) != 0);
            }
    
            if ((numw = fwrite(buffer, 1, numr, filew)) != numr) {
                perror("write file error.\n");
                //exit(1);
            }
        }
    
        fclose(filer);
        fclose(filew);
    }
    

    Řešení dotazu:


    Odpovědi

    5.1.2014 18:32 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: SIGSEGV pri kopirovani souboru pomoci fopen

    A nejsou právě problémem ty zakomentované exit-y?, tedy dle hlášky zrovna ten ve fopen pro filew.
    U zapisovaného souboru je dobré kontroloval návratový kód fclose, moc se to sice nedělá, ale…

    Pozor příklad, tvrdě přepíše cílový soubor!
    #include <stdlib.h>
    #include <unistd.h>
    #include <stdio.h>
    
    void send_file(const char *source, const char *destination) {
        FILE * filer, * filew;
        int numr;
        const int SIZE_OF_BUFFER=1024;
        char buffer[SIZE_OF_BUFFER];
    
        if ((filer = fopen(source, "rb")) == NULL) {
            perror("open read file error.\n");
            exit(1);
        }
    
        if ((filew = fopen(destination, "wb")) == NULL) {
            perror("open write file error.\n");
            fclose(filer);
            exit(1);
        }
    
        while (feof(filer) == 0) {
    
            if ((numr = fread(buffer, 1, SIZE_OF_BUFFER, filer)) != SIZE_OF_BUFFER) {
    
                if (ferror(filer) != 0) {
                    perror("read file error.\n");
                    fclose(filer);
                    fclose(filew);
                    exit(1);
                }
            }
    
            if (fwrite(buffer, 1, numr, filew) != numr) {
                perror("write file error.\n");
                fclose(filer);
                fclose(filew);
                exit(1);
            }
        }
    
        if(fclose(filer) != 0)
          printf("read file - close error.\n");//has read-file been deleted ... ???
    
        if(fclose(filew) != 0)
          printf("write file - close error.\n");//flush C buffer fails
    
        //fsync ????
    
    }
    
    int main( int argc, const char* argv[] ){
      if (argc == 3 ) {
        send_file(argv[1], argv[2]);
      } else {
         printf("Main error, two params needed (from, to).\n");
         return 1;
      }
      return 0;
    }
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    tomes.io avatar 5.1.2014 22:02 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: SIGSEGV pri kopirovani souboru pomoci fopen
    Pomohlo, diky.

    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.