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