Alternativni UNIX systemy - BSD
Dalibor Straka
dast na panelnet.cz
Pondělí Leden 15 03:14:23 CET 2007
On Sun, Jan 14, 2007 at 07:09:06PM +0100, Martin `MJ' Mares wrote:
> Ahoj!
>
> > Zalezi na povaze dat. Ku prikladu vyse uvedeny union nelze v mem pripade
> > pouzit, protoze se pole plni volanim read(sock, buf, size). Problem
> > nastava pri cteni z buf, protoze protokol ma specifikovano:
> > <uint32_t><unsigned char><uint32_t>
> > Nicmene i toto se da docela korektne obejit, jak mi ukazal pedantsky
> > cvicici, volbou vhodnejsi datovych struktur a nectenim paketu najednou.
>
> Neni to spis tak, ze cteni toho integeru najednou stejne nedava
> smysl, protoze kdovi jakou bude mit endianitu? Neni proste lepsi
>
Ne, protokol jasne specifikuje jakou endianitu mit musi.
All integer members in messages are encoded as a 4-byte big-endian
number.
> napsat si vlastni funkci, ktera posklada integer ze ctyr bytu,
> at uz jsou alignovane jakkoliv? To je cistsi take proto, ze nikdo
> nezarucuje, ze kompilator bude mit _prave_ 32-bitovy typ.
>
Aha, to me zajima. Nekde nemusi byt uint32_t? Ze sitovych paketu ctu
pomoci ntohl(). Pri nejhorsim mohu kdykoliv nahradit prave ntohl a htonl
svymi vytvory ;-).
-- Dalibor Straka
Další informace o konferenci Linux