[devel] Особенности Си для x86_64
Denis Klimov
=?iso-8859-1?q?zver_=CE=C1_altlinux=2Eorg?=
Ср Окт 1 13:36:35 MSD 2008
On Wed, 1 Oct 2008 12:59:44 +0400 Damir Shayhutdinov wrote:
> На x86_64 sizeof(long) = sizeof(void*) = 8 байт.
> а sizeof(int) = 4 байт.
>
> Хотите писать кроссплатформенный код - освойте введенные в C99
> (stdint.h) типы intN_t.
>
> То есть в вашем случае для 4-байтового знакового целого надо было
> использовать тип int32_t а не long.
Поправил. разбираться стало нормально.
Но. возникла проблема одна.
На x86_64 вывод стал таким:
Netflow version: 5
bytes: 17408
src_addr: 113.0.168.192
dst_addr: 26.0.168.192
src_port: 1023
src_port: 65535
proto: 6
Т.е ip перевернутые.
Пробовал добавлять пару строк
((struct flow *)p)->src_addr.s_addr = htonl(((struct flow *)p)->src_addr.s_addr);
((struct flow *)p)->dst_addr.s_addr = htonl(((struct flow *)p)->dst_addr.s_addr);
перед выводом. Ничего не поменялось. Пробовал заменять htonl на ntohl - все равно так же.
Судя по ману на inet_ntoa ему надо network byte order. Так что htonl правильное. Но не помогает.
Так же надо заметить, что в i586 у меня правильно работает только если
нету этих строк. При их добавлении (с htonl или ntohl) - порядок
меняется на неверный.
Небольшая оговорка. i586 - это у меня контейнер. HN которого x86_64. хотя не думаю что это должно на него влиять.
Код стал таким
http://pastebin.ca/1215627
--
Denis Klimov
zver
Подробная информация о списке рассылки Devel