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 15:22 | IT novinky

    Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního

    … více »
    NUKE GAZA! 🎆 | Komentářů: 0
    včera 15:11 | Zajímavý projekt

    Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.

    Ladislav Hagara | Komentářů: 3
    včera 04:44 | Zajímavý software

    Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.

    Ladislav Hagara | Komentářů: 0
    20.3. 14:55 | Nová verze

    KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    20.3. 13:22 | IT novinky

    Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.

    Ladislav Hagara | Komentářů: 7
    20.3. 04:44 | Zajímavý článek

    Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).

    Ladislav Hagara | Komentářů: 2
    20.3. 00:33 | Nová verze

    Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    20.3. 00:11 | Zajímavý software

    Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.

    Ladislav Hagara | Komentářů: 7
    19.3. 19:22 | Nová verze

    GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.

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

    Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.

    Ladislav Hagara | Komentářů: 4
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1125 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    1.2.2014 22:23 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: C - lze poslat soubor i zpravu na server soucasne?
    Tak jsem trosku pohnul, akorat jsem se ted za sekl na dvou vecech:

    1) Po prijeti zpravy nezapise server korektne vetsi soubor. Male souboru o velikosti nekolika bytu ano. Velke soubory, napriklad zdrojaky zapise nekorektne. Dival jsem se na kod dlouho, hodle dlouho a proste nemuzu prijit na to, v cem to je. Bud je chyba na strane sestaveni zpravy (tedy klient) nebo ve zpusobu cteni z bufferu a zapisu do souboru na strane serveru. Za boha nemuzu prijit na to, v cem to je. Nejsem schopny to naprogramovat.

    Zde klientska fce ktera posila zpravy. Na zacatek da udaj o delce zpravy, pak zpravu a nakonec data (buffer se souborem):

    void send_msg(char *message, char *path) {
    
        char msg[1024];  
        strcpy(msg, message);
        FILE * fr;
        long lSize;
        char * buffer;
        size_t result;
        char *header;
    
        fr = fopen(path, "rb");
        if (fr == NULL) {
            fputs("File error", stderr);
            exit(1);
        }
        fseek(fr, 0, SEEK_END);
        lSize = ftell(fr);
        rewind(fr);
    
        buffer = (char*) malloc(sizeof (char)*lSize);
        if (buffer == NULL) {
            fputs("Memory error", stderr);
            exit(2);
        }
    
        result = fread(buffer, 1, lSize, fr);
        if (result != lSize) {
            fputs("Reading error", stderr);
            exit(3);
        }
    
        fclose(fr);
        size_t len1 = strlen(msg), len2 = strlen(buffer);
    
        /* delka zpravy */
        asprintf(&header, "%d^", (int) len1 + (int) len2);
        printf("header is: %s\n", header);
        size_t len3 = strlen(header);
        
        char *concat = (char*) malloc(len1 + len2 + len3+1);
        
        if (concat == NULL) {
            MY_KILL_ON_ERROR("Concat message\n");
            exit(1);
        }
      
        /* spoj vse dohromady */
        memcpy(concat, header, len3);
        memcpy(concat + len3 , msg, len1);
        memcpy(concat+ len3 +len1, buffer, len2);   
        send(sockfd, concat, strlen(concat), 0);
    
        free(buffer);
        free(message);
        free(header);
        message = NULL;
    }
    
    Tady jsou funkce serveru. thread_reader nacte buffer (zjisti si delku zpravy a souboru, nacte a posle do fce handle_msg ke zpracovani):
    
    void handle_msg(char *buf, int buflen, int hdrlen) {
        
        char *p_str;
        char chunk[50000];
        char home[1024];
        char path[1024];
        int j;
        int flag;
        int hm_len;
        int parlen;
        int is_dir;
        long fsize; /* delka souboru */
        int meslen;
        int f, ofset;
    
        /*zkopiruj buffer do chunk pro ucely parsovani pomoci strtok*/    
        if (buflen < 1024) {
                    memcpy(chunk, buf, buflen);
                    f = 0;
        } else {
            memcpy(chunk, buf, 1024);
            buflen -= 1024;
            ofset = 1024;
        }
    
        while (f) {
            if (buflen < 1024) {
                    memcpy(chunk + strlen(chunk), buf + ofset, buflen);
                    fsize = 0;
            } else {        
                memcpy(chunk + 1024, buf + ofset, 1024);
                buflen -= 1024;
                ofset += 1024;
            }
        }
        /* parsuj zpravu */
        j = 0;
        p_str = strtok(chunk+hdrlen, ":");
    
        while (p_str != NULL) {
    
            if (j == 0)
                flag = atoi(p_str);
            else if (j == 1)
                is_dir = atoi(p_str);
            else if (j == 2)
                hm_len = atoi(p_str);
            else if (j == 3)
                parlen = atoi(p_str);
            else if (j == 4)
                fsize = atol(p_str);
            else if (j == 5)
                strcpy(path, p_str);
    
            p_str = strtok(NULL, ":");
            j++;
        }
        /* kontrolni vypisy */
        printf("flag: %d\n", flag);
        printf("isdir: %d\n", is_dir);
        printf("hmlen: %d\n", hm_len);
        printf("parlen: %d\n", parlen);
        printf("fsize: %ld\n", fsize);
        printf("path: %s\n", path);
    
        /* nastav cestu do domovskeho adresare */
        memset(home, '\0', strlen (home));
        strcpy(home,mydir);
        strcat(home, path + hm_len);
        home[strlen(home)] = '\0';
    
        char *parent = NULL;
        parent = get_parentdir(home);
    
        if ((flag == IN_CREATE) || (flag == IN_MOVED_TO) || (flag == IN_CLOSE_WRITE)) {
            mkpath(parent, S_IRWXU | S_IRWXG | S_IRWXO);
            if (is_dir)
                mkpath(home, S_IRWXU | S_IRWXG | S_IRWXO);
            else {
                FILE *fr = fopen(home, "wb");
                if (fr == NULL)
                    printf("File Cannot be opened file on server.\n");
    
                /* vypocti delku bufferu pred daty */
                meslen = (buflen - fsize) + hdrlen;
    
               /* zapisuj do souboru postupne po 1KB*/
                if (fsize < 1024){
                    fwrite(buf + meslen, sizeof (char), fsize, fr); 
                    fsize = 0;             
                } else {               
                     fwrite(buf + meslen, sizeof (char), 1024, fr);
                     fsize -= 1024;
                     meslen += 1024;
                }                     
                while (fsize) {
                    if (fsize < 1024) {
                        for (j = 0; j < fsize; j++) {
                            fwrite(buf + meslen, sizeof (char), fsize, fr); 
                            meslen++;
                        }
                        fsize = 0;
                    } else {                   
                        fwrite(buf + meslen, sizeof (char), 1024, fr);
                        fsize -= 1024;
                        meslen += 1024;
                    }
                }           
                fclose(fr);
            }
        }
        free(parent);
    }
    
    
    Delal jsem vse podle vasich rad. Mam delku souboru, delku zpravy, zkopiruji prislusny pocet bajtu a poslu do fwrite. U malych souboru to funguje, u vetsich, treba kolem 10kB to nefunguje. Nevim proc a uz jsem z toho fakt zoufaly.

    2) toto vse "funguje" v netbens debuggeru. Male soubory zkopiruje, vetsi zkopiruje, ale obsah je rozhazena zmet znaku. Kdyz ale debugger vypnu a spustim to normalne (nebo z prikazove radky) tak se nejenze nezkopiruje soubor, ale kontrolni vypisy promennych (flag, delka message, path) maji vzdy nulovou hodnotu. absolutnen etusim proc, setkal se s tom nekdy nekdo?

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.