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:11 | Zajímavý článek

Společnost Red Hat s vydáním Red Hat Enterprise Linuxu 7.4 oznámila ukončení podpory souborového systému Btrfs. Bude to mít vliv na podporu Btrfs v linuxových distribucích SUSE Linux Enterprise? Odpověď v příspěvku na blogu SUSE: Kdyby Brazílie, jeden z největších producentů hovězího masa, oznámila, že přestane produkovat ryby, ptali byste se, zda Peru, jeden z největších světových producentů ryb, přestane produkovat ryby? Pravděpodobně ne. Stejně je to s Btrfs. Btrfs je a nadále zůstane výchozím souborovým systémem v SUSE Linux Enterprise [reddit].

Ladislav Hagara | Komentářů: 1
včera 19:46 | Nová verze

dnsdist, specializovaný balancer pro DNS provoz, dosáhl stabilní verze 1.2.0. Tento software vyvíjí komunita kolem PowerDNS a neměl by uniknout pozornosti nikomu, kdo provozuje vytíženější rekurzivní DNS servery. Balancer je vhodný k obraně před DDoS útoky, je skriptovatelný v LUA, disponuje konzolovým rozhraním a má spoustu dalších zajímavých vlastností.

… více »
BigWrigley | Komentářů: 0
včera 15:22 | Nová verze

Byla vydána verze 9.5 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Zdůraznit lze možnost ověřování GPG podpisů u commitů.

Ladislav Hagara | Komentářů: 4
22.8. 16:22 | Nová verze

Byla vydána verze 0.11.0 softwaru pro statistickou analýzu dat GNU PSPP (Wikipedie), svobodné alternativy k proprietárnímu softwaru IBM SPSS Statistics (Wikipedie). Vedle několika vylepšení a oprav chyb jsou řešeny také 2 bezpečnostní chyby CVE-2017-10791 a CVE-2017-10792. O týden později byla vydána verze 1.0.0 přinášející pouze aktualizaci překladů. Proč verze 1.0.0 a ne například 0.11.1? Dle vývojářů jsou důvody následující:

… více »
Ladislav Hagara | Komentářů: 0
22.8. 10:35 | Komunita

Na blogu Oracle se objevila zpráva o tom, že plánovaná verze Java EE 8 bude uvolněna jako open source (referenční implementace a compatibility kit). V současné době je uvolněna jen Java SE (standard edition) pod licencí GPLv2 v podobě OpenJDK (Open Java Development Kit), kterou začal v roce 2006 uvolňovat Sun.

Max | Komentářů: 4
21.8. 23:55 | IT novinky

Google na YouTube oficiálně představil Android 8.0 Oreo. Přehled novinek v příspěvku na blogu věnovaném vývojářům.

Ladislav Hagara | Komentářů: 34
21.8. 16:44 | Zajímavý článek

Po téměř 3 měsících od vydání třetího čísla publikoval Michal Špaček na svých stránkách čtvrté číslo newsletteru věnovanému bezpečnosti, bezpečnému vývoji převážně webových aplikací a bezpečnosti uživatelů. Jedná se současně o číslo poslední: "Nepíše se mi to lehce, a trvalo to, než jsem to ze sebe dostal, ale tohle je poslední newsletter v této podobě. Ani jsem ho nestihl pojmenovat a už jsem ho zabil. Nezbývá mi tolik času, abych každou událost, novinku a změnu v prohlížeči detailně popisoval tak, jak bych v newsletteru chtěl, mrzí mě to".

Ladislav Hagara | Komentářů: 2
21.8. 07:00 | Nová verze

Byla vydána diaspora* ve verzi 0.7.0.0. Jedná se o svobodný software, který slouží jako osobní webový server pro poskytování služeb sociální sítě (Wikipedie). Přehled novinek v příspěvku na blogu a na GitHubu. Sociální síť diaspora* byla před pěti lety předána komunitě.

Ladislav Hagara | Komentářů: 0
21.8. 06:00 | IT novinky

Společnost Hardkernel stojící za jednodeskovými počítači ODROID představila na YouTube minipočítač určený pro domácí cloud ODROID-HC1 vycházející z ODROID-XU4. Minipočítač s kovovou krabičkou, do které stačí vložit 2 a půl palcový disk, lze koupit za 49 dolarů. ODROID-HC1 je stohovatelný.

Ladislav Hagara | Komentářů: 41
20.8. 16:22 | Nová verze

Byl vydán DB Browser for SQLite (sqlitebrowser) ve verzi 3.10.0. Nejnovější stabilní verze této grafické nadstavby nad relačním databázovým systémem SQLite (Wikipedie) přináší například integraci s DBHub.io, tj. platformou pro sdílení SQLite databází. Podrobnosti na GitHubu.

Ladislav Hagara | Komentářů: 2
Těžíte nějakou kryptoměnu?
 (4%)
 (2%)
 (18%)
 (76%)
Celkem 378 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    Dotaz: Prapodivne zarovnavani dat v C strukture

    10.11.2006 12:26 neregistrovaný
    Prapodivne zarovnavani dat v C strukture
    Přečteno: 137×
    Zdravim velevazeni!

    Mam takovy maly vetsi problem s Cckem a kdevelop. Pisu drobnej programek pracujici s BMP souborem. Data se nactou do nejakyho bufferu, zavola se funkce nize a ta mi z ukazatele na buffer udela ukazatel na strukturu hlavicek BMP a ty pak porovnava. Tak jak je kod napsany nize, tak take funguje - temer jak bych si pral. Struktura paradne sedi s datama ze souboru. K totalnimu blahu by mi stacilo malo: chtel bych odkomentovat ty dva radky a smazat to '+2'. Jenze tu je kamen urazu - Nefunguje to! :-( Ten prvni short se mi v debuggeru zobrazi spravne, ale data za nim od bfSize dal jsou posunuta ne o dva, ale o ctyri bajty! Teorii Ccka a kompilatoru gcc jsem nikdy obzvlaste nestudoval, ale pod linuxem uz jsem napsal nejakych par fungujicich daemonu, slozitejsich databazovych aplikaci a hacku vseho moznyho... Ale toto vidim poprve. Netusite nahodou nekdo cimto?

    typedef
    struct 
    {
    //	short bfType;
    	long bfSize;
    	long bfReserved;
    	long bfOffBits;
    	long biSize;
    	long biWidth;
    	long biHeight;
    	short biPlanes;
    	short biBitCount;
    } bmp_headers;
    
    int getCentralPoint(char *buffer, long buf_len, long xres, long yres, long x, long y)
    {
    	char *poi;
    	poi=buffer;
    	bmp_headers *header;
    	header=(bmp_headers*)(buffer+2);
    //	if(header->bfType!=0x4d42) return -1;
    	if(buf_len!=header->bfSize) return -1;
    	if(header->bfOffBits!=54) return -1;
    	if(header->biWidth!=xres) return -1;
    	if(header->biHeight!=yres) return -1;
    	if(header->biBitCount!=24) return -1;
    ...
    

    Odpovědi

    10.11.2006 12:38 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    No a kolik je sizeof short na tvem systemu? Proste misto 2 pouzij sizeof(short).
    10.11.2006 12:55 neregistrovaný
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    No, short by snad mel byt vsude 2B a skutecne mi to tak pise. Stejne jako long by mel bejt 4B. Nejisty byva int, proto se mu prave vyhybam. Ja mam normalni 32bitovy gentoo:

    CFLAGS="-O3 -march=athlon-4 -pipe -fomit-frame-pointer" CHOST="i686-pc-linux-gnu"

    Ale dylka shortu to primo neni to, co me trapi. Jako hexa cislo mi ho to ukazuje skutecne dva bajty. Horsi je, ze ta druha promenna je po odkomentovani zarovnana od ctvrtyho bajtu a ne od druhyho (resp tedy jeji offset od pocatku struktury je +4 a ne +2). A pritom, kdyz ji vynecham, tak ty dalsi dva shorty tam dal jsou spravne.

    10.11.2006 13:01 volca
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Ty dva bajty mezi struct a long jsou kvuli tomu, aby ten long byl citelny v jednom cyklu (IMHO) Jinak jeste funguje prepinac kompilatoru --f-pack-structs nebo jak. Dylka shortu se lisi platformu od platformy, lepsi je pouzit inttypes.h a z ni int16_t, int32_t atd. i tady se vsak nevyresi problem s BIG/LITTLE endianness
    10.11.2006 13:04 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    No, short by snad mel byt vsude 2B a skutecne mi to tak pise. Stejne jako long by mel bejt 4B.

    Můžete, prosím, poskytnout referenci na místo v normě jazyka C, kde se tohle píše? Já mám třeba sizeof(long) rovno osmi…

    10.11.2006 13:13 neregistrovaný
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    No, dobre... Uznavam tedy, ze toto platilo podle nejakych starsich norem kdysi davno za 32bitova. Ve vsech trech nebo ctyrech online ucebnicich, co mam, to tak je. Ja zapomnel, ze uz existujou taky nejaky 64bitovy platformy. Ty me ovsem pro moji diplomku netrapi - jak doma, tak ve skole mam jen stary skopky... :-)))
    msk avatar 10.11.2006 14:15 msk | skóre: 27 | blog: msk
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Nikdy to neplatilo podla zaidnych noriem. Bolo to ale tak bezne z dovodu vacsinovej architektury, ze to ( niektori ) ludia zacali povazovat za samozrejmost. Okrem 64 bitovych platforiem to este mozu byt 7 bitove, 24 bitove, 158 bitove a stomiliard bitove ( inymi slovami akekolvek ). Pokial chcete premapovavat binarne smetie na strukturu, pouzite (u)int_xy_t a atribut packed. Ani vyhovorka na diplomku by nemala byt zamienkou pre prasenie ( a ja byt profesor tak za taky kod vyhadzujem ).
    10.11.2006 13:43 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture

    Jak to je ti povi uryvek z C Programming Language od K&R:

    The intent is that short and long should provide different lengths of integers where practical; int will normally be the natural size for a particular machine. short is often 16 bits long, and int either 16 or 32 bits. Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16 bits, longs are at least 32 bits, and short/code> is no longer than int, which is no longer than long

    10.11.2006 14:07 petris
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    No, short by snad mel byt vsude 2B a skutecne mi to tak pise. Stejne jako long by mel bejt 4B.
    A na to jste prisel kde? Je to totiz pekna blbost. Jedine, co je zaruceno je, ze pro rozsahy plati short <= int <= long <= long long. Jak vidite o rozsahu v bytech tam nic neni, a proto klidne vsechny muzou byt stejne velke, treba 32bitu a je to spravne.
    10.11.2006 13:03 valesek | skóre: 10
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    To moc nepomuze, ja jen vim, ze nejlepsi a vetsinou prenosu zdrojaku nepodlehajici vec je proste psat unsigned char[2] misto short nebo unsigned char[4] pro long, s tim jsou nejmensi problemy, v linuxu se mi toto take stalo nekolikrat, a rekl bych ze za to mohou posledni verze GCC, ktere pocitaji uz jen s 32bitovymi adresovacimi prostory a zarovnavaji vse na 32 bit, aby se jim s pametovym mistem pracovalo lip, napr struct { char x; unsigned long y }; by mela zabirat 2x32bitu v pameti pri 32bitove adresaci a bude to naskladano jako 1byte, 3byty volno, 4bytovy long, pri konstrukci struct {char x; unsigned char y[4]}; pri 32bitove adresaci to bude zarovnano asi takto 1bytex, 4byte y, 3 byty volno, dle meho je to zpusobeno upravou kompilatoru na 64bit, a univerzalnosti tohoto zpusobu kompilace, co jde vtesnat do jednoho bloku v tomto pripade 32bitu tak se tam vmestna, jinak to jde do bloku vys, muze to vyrazne urychlit praci programu, ale ma to nevyhody pri pouziti memcpy. --- omlouvam se predem pokud tady tlacham hlouposti, ale pred ctyrma lety, jak jsem zmenil pracovni misto, tak jsem se divil proc to v novem zamestani maji vse v bytech a bylo mi vysvetleno, ze je to diky zarovnavani dat v pameti na ruznych procesorech(nonPC)a z hlediska kompatibility zdrojaku je to lepsi takhle, je pravda ze pri pristupu na takovou to promennou musite pote stale pristupovat pomoci *((uint16 *) &x) apod, ale zase mam tu jistotu, ze mi to bude kompilovat spravne
    10.11.2006 13:07 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    a rekl bych ze za to mohou posledni verze GCC, ktere pocitaji uz jen s 32bitovymi adresovacimi prostory a zarovnavaji vse na 32 bit

    Ne. Mohou za to nezodpovědní programátoři, kteří na základě své zkušenosti z jedné konkrétní verze jednoho konkrétního prohlížeče (s jedním konkrétním nastavením) na jedné platformě neoprávněně usuzují, že přesně stejně se musejí chovat všechny prohlížeče na všech platformách.

    10.11.2006 14:11 thingie
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Prohlížeče? :-)
    10.11.2006 22:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Asi síla zvyku. Obvykle takhle dštím oheň a síru na autory webových stránek… :-)
    10.11.2006 12:54 volca
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Dobry den, vas problem je zrejme dan optimalizaci zarovnavani poli ve struct zkuste struct obalit pomoci:
    #pragma pack(push,1)
    struct....
    #pragma pack(pop)
    10.11.2006 13:00 neregistrovaný
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Jo diky! Pomohlo! :-) Nejaky takovyhle zarovnavaci direktivy jsem prave hledal v ruznych online ucebnicich a googlu, ale zatim nenasel... :-(
    10.11.2006 13:01 ondra
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Jo, určitě je to zarovnáváním.

    Ještě jiná věc: Nevadí, že např. bfSize je někdy 32 bitů a jindy 64? Na 64 bitovém linuxu bude asi většinou long 64 bitový, na 32-bitovém je 32-bitový. Raději bych zkusil nějaký vhodný typ ze stdint.h.
    10.11.2006 13:01 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture

    Specifikace jazyka neříká nic o tom, jak budou jednotlivé položky struktury zarovnány v paměti. To, co požadujete, se dá u některých překladačů vynutit speciální direktivou, ale obecně to zařídit nelze. Musíte si uvědomit, že existují i platformy, kde procesor neumí číst 32-bitové slovo z adresy, která není dělitelná čtyřmi (a i tam, kde to jde, je to často pomalejší).

    Navíc si zaděláváte na problémy s kompatibilitou už tím, že položky deklarujete jako short a long, což jsou datové typy, o jejichž velikosti nevíte obecně vůbec nic kromě toho, že sizeof(long) >= sizeof(short). Takže ta vaše ukázka kódu je odstrašujícím příkladem toho, co nazývám empirickým programováním - zkusil jste to přeložit na jednom počítači jedním překladačem s jednou variantou parametrů a fungovalo to, takže usuzujete, že to musí fungovat všude.

    10.11.2006 13:29 neregistrovaný
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    Jasne, pro prenositelnost urcite bastl. Vychazi to ale z predpokladu 32bitove platformy a ze tam ten kod taky zustane. Snazil jsem se prave jen vyhnout moznym problemum s velikosti int.

    Ale pri te prilezitosti by me tedy zajimalo, jak by se to dalo co nejvic koser napsat univerzalneji. Rad se necemu novemu priucim... Preci jenom 64b pocitacu asi mozna ubyvat nebude... :-)

    10.11.2006 14:12 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    fukncie, nezávislé na byte-order/sizeof cieľoveho stroja
    10.11.2006 14:13 Tom K | skóre: 20
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    viz stdint.h
    u_int32_t a jemu podobne datove typy
    echo -n "u48" | sha1sum | head -c3; echo
    10.11.2006 13:04 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    btw, mimo aktuálny problém by bolo vhodné vás upozorniť na problém big-endian v little-endian :-)

    riešenie oboch je rovnaké:

    header->bfxxx = read_int16 (buffer);
    header->bfyyy = read_int64 (buffer);
    

    C vraví iba to, že short nie je väčší ako int, long nie je menší ako int, a int má minimálne 32 bit.
    10.11.2006 13:28 valesek | skóre: 10
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    a na 16bit procesorech je int roven 16bit
    10.11.2006 14:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    jj, malo byť long, nedávam si pozor :-(
    ale to, že je short min 16bit, to som už dávno zabudol
    10.11.2006 14:11 Tom K | skóre: 20
    Rozbalit Rozbalit vše Re: Prapodivne zarovnavani dat v C strukture
    tusime.
    v C neni nikde receno, ze struktury se zarovnavaji na velikost promenne, takze chytry kompilator to zarovna tak, aby se to CPU lepe cetlo. pokud chces mit strukturu zarovnanou, nech strycka googla hledat: __attribute__((packed)).
    echo -n "u48" | sha1sum | head -c3; echo

    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.