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 11:22 | Nová verze

    Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.17.0. Podrobný přehled novinek v changelogu. Přidána byla základní podpora gamepadů. Opraveno bylo několik zranitelností. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.

    Ladislav Hagara | Komentářů: 0
    dnes 11:00 | IT novinky

    Americká technologická společnost Apple loni v Irsku na daních zaplatila 17 miliard dolarů (zhruba 350 miliard Kč). To představovalo 40 procent celkové částky, kterou firma odvedla na dani z příjmů po celém světě. Vyplývá to z účetních výkazů podniku. Platbu výrazně zvýšilo rozhodnutí Soudního dvora EU z roku 2024, podle něhož měl Apple doplatit Irsku na daních 13 miliard eur (313 miliard Kč).

    Ladislav Hagara | Komentářů: 0
    dnes 09:55 | Zajímavý projekt

    CrossPoint Reader je open-source alternativní firmware pro menší, levné čtečky, vybavené cca čtyřpalcovým e-ink displejem. Zahrnuje aplikaci pro čtení e-knih a webový server pro konfiguraci a přenos souborů po síti. Verze 1.0 byla vydána v únoru 2026. Recenze současné verze 1.5 vyšla na Linux Weekly News.

    |🇵🇸 | Komentářů: 0
    21.8. 05:00 | Nová verze

    Byla vydána verze 1.98.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.

    Ladislav Hagara | Komentářů: 0
    21.8. 04:22 | Nová verze

    Byla vydána nová verze 7.1 (YouTube) svobodného open source redakčního systému WordPress. Kódové jméno Mary Lou bylo vybráno na počest americké jazzové klavíristky Mary Lou Williams (YouTube).

    Ladislav Hagara | Komentářů: 0
    20.8. 19:11 | Nová verze

    Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.

    Ladislav Hagara | Komentářů: 0
    20.8. 12:33 | Nová verze

    Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    20.8. 04:11 | IT novinky

    Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.

    Ladislav Hagara | Komentářů: 0
    20.8. 02:55 | IT novinky

    Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.

    Ladislav Hagara | Komentářů: 0
    20.8. 01:33 | Nová verze

    Byla vydána nová verze 1.27 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (30%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2473 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    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: 420×
    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.