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í
×
    4.7. 23:33 | IT novinky

    Čeští policisté společně se svými tureckými kolegy zadrželi 51 lidí, kteří se podle kriminalistů podíleli na provozu podvodného call centra v Istanbulu. Skupina je spojena s 1173 případy podvodů na českých občanech, při kterých vznikla škoda přes 553 milionů korun.

    Ladislav Hagara | Komentářů: 7
    3.7. 03:55 | Nová verze

    Immich byl vydán v nové verzi 3.0.0. Jedná se o alternativu k výchozím aplikacím od Googlu a Applu pro správu fotografií a videí umožňující vlastní hosting serveru Immich. K vyzkoušení je demo. Immich je součástí balíčků open source aplikací FUTO. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPL-3.0.

    Ladislav Hagara | Komentářů: 5
    3.7. 02:55 | IT novinky

    Společnost Juno Computers prodávající počítače s předinstalovaným Linuxem má nově v nabídce linuxový tablet Juno Tab 4 - WiFi. Na výběr je Debian, Ubuntu a Kubuntu. Předobjednat jej lze za 949 liber (26 500 korun).

    Ladislav Hagara | Komentářů: 0
    3.7. 01:22 | Nová verze

    Podman (Pod Manager), nástroj umožňující vytvářet a provozovat kontejnery, aniž by uživatel potřeboval práva roota, byl vydán v nové major verzi 6.0.0. Přehled novinek v poznámkách k vydání. Řešena je i vážná bezpečnostní chyba CVE-2026-57231.

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

    Společnost Sony oznámila, že od ledna 2028 přestane vydávat nové hry pro PlayStation na fyzických discích. Všechny budoucí tituly budou dostupné výhradně v digitální podobě na PlayStation Store.

    Ladislav Hagara | Komentářů: 7
    2.7. 16:55 | Nová verze

    Google Chrome 150 byl prohlášen za stabilní. Nejnovější stabilní verze 150.0.7871.46 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 433 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    2.7. 13:00 | Nová verze

    Soudní dvůr Evropské unie potvrdil rekordní pokutu 4,125 miliardy eur (100 miliard Kč) americké technologické firmě Google ze skupiny Alphabet. Pokutu firmě v roce 2018 vyměřila Evropská komise (EK) za to, že Google podle ní zneužívá operačního systému Android k potlačení konkurence na trhu vyhledávacích služeb.

    Ladislav Hagara | Komentářů: 17
    2.7. 12:44 | IT novinky

    Administrativa amerického prezidenta Donalda Trumpa povolila firmě Anthropic obnovit plný přístup klientů k modelům umělé inteligence (AI) Fable 5 a Mythos 5. Ty byly nedostupné bezmála tři týdny kvůli bezpečnostním obavám vlády, třebaže americké ministerstvo obchodu minulý pátek povolilo omezený přístup k modelu Mythos 5 pro některé „důvěryhodné“ domácí organizace.

    Ladislav Hagara | Komentářů: 1
    2.7. 12:22 | Zajímavý článek

    Francúzska organizácia na ochranu spotrebiteľa, po viac než ôsmych rokoch skúmania, žaluje Epson za plánované zastarávanie tlačiarní. Súd sa začína dnes, 2. 7. 2026, vo francúzskom Nanterre.

    Vlado99 | Komentářů: 9
    2.7. 03:00 | Zajímavý software

    Erin Catto, autor open source 2D fyzikálního enginu Box2D (Wikipedie), představil nový 3D fyzikální engine Box3D. Engine je již používán ve hře The Legend of California.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (16%)
     (25%)
    Celkem 2060 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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.