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 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 0
dnes 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
dnes 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

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

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 6
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (4%)
 (10%)
Celkem 369 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

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: 185×
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.