The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от cruzo on 20-Сен-06, 07:34 
Всем привет.

Разбираюсь с примером из главы Raw sockets. Реализация команды ping (стр. 668 англоязычного издания). Никак не могу сообразить как конвертируются микросекунды в милисекунды, IMHO в книге ошибка:

...
tvsend = (struct timeval *) icmp->icmp_data;
tv_sub(tvrecv, tvsend);
rtt = tvrecv->tv_sec * 1000.0 + tvrecv->tv_usec / 1000.0;
...

Но ведь милисекунды это 10^-3, соответственно должно быть так:

rtt = tvrecv->tv_sec / 1000.0 + tvrecv->tv_usec * 1000.0;

Поправьте меня, либо я не замечаю очевидного?

Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от Boris Polevoy on 20-Сен-06, 10:29 
>Всем привет.
>
>Разбираюсь с примером из главы Raw sockets. Реализация команды ping (стр. 668
>англоязычного издания). Никак не могу сообразить как конвертируются микросекунды в милисекунды,
>IMHO в книге ошибка:
>
>...
>tvsend = (struct timeval *) icmp->icmp_data;
>tv_sub(tvrecv, tvsend);
>rtt = tvrecv->tv_sec * 1000.0 + tvrecv->tv_usec / 1000.0;
>...
>
>Но ведь милисекунды это 10^-3, соответственно должно быть так:
>
>rtt = tvrecv->tv_sec / 1000.0 + tvrecv->tv_usec * 1000.0;
>
>Поправьте меня, либо я не замечаю очевидного?
>
>Спасибо.

struct timeval {
        long            tv_sec;         /* seconds (XXX should be time_t) */
        suseconds_t     tv_usec;        /* and microseconds */
};

tv_usec - это микросекунды, 10^-6 соответсвенно, делятся на 1000 (10^3), чтобы получить значение миллисекунд.
То же самое в отношении структуры timespec, там наносекунды, делятся на 1000000 для отображения миллисекунд.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от анатолий on 20-Сен-06, 10:37 
>
>struct timeval {
>        long    
>        tv_sec;  
>      /* seconds (XXX should be
>time_t) */
>        suseconds_t    
> tv_usec;        /* and
>microseconds */
>};
>
>tv_usec - это микросекунды, 10^-6 соответсвенно, делятся на 1000 (10^3), чтобы получить
>значение миллисекунд.
>То же самое в отношении структуры timespec, там наносекунды, делятся на 1000000
>для отображения миллисекунд.
Гм.. чтобы получить милисекунды из микросекунд, нужно 10^-6 * 10^3 = 10^-3, разве не так?
АналогичноЮ, секунды (tv_sec) нужно делить на 1000 для получения милисекунда, разве не так?

Что такое timespec, нигде этой структуры не видел?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от Boris Polevoy on 20-Сен-06, 12:59 
>>
>>struct timeval {
>>        long    
>>        tv_sec;  
>>      /* seconds (XXX should be
>>time_t) */
>>        suseconds_t    
>> tv_usec;        /* and
>>microseconds */
>>};
>>
>>tv_usec - это микросекунды, 10^-6 соответсвенно, делятся на 1000 (10^3), чтобы получить
>>значение миллисекунд.
>>То же самое в отношении структуры timespec, там наносекунды, делятся на 1000000
>>для отображения миллисекунд.
>Гм.. чтобы получить милисекунды из микросекунд, нужно 10^-6 * 10^3 = 10^-3,
>разве не так?
>АналогичноЮ, секунды (tv_sec) нужно делить на 1000 для получения милисекунда, разве не
>так?
>

tv_usec - это _количество_ микросекунд, тебе надо получить для отображения _количество_ миллисекунд, соответствующее _тому_же_ временному интервалу.
0.2 сек = 200 мс = 200000 мкс = 200000000 нс
теперь понятно, что на что делить?


>Что такое timespec, нигде этой структуры не видел?

man clock_gettime - это самая правильная функция для получения текущего времени

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от анатолий on 20-Сен-06, 14:20 
>tv_usec - это _количество_ микросекунд, тебе надо получить для отображения _количество_ миллисекунд,
>соответствующее _тому_же_ временному интервалу.
>0.2 сек = 200 мс = 200000 мкс = 200000000 нс
>теперь понятно, что на что делить?
>
Наконец-то дошло :) Спасибо!

>
>>Что такое timespec, нигде этой структуры не видел?
>
>man clock_gettime - это самая правильная функция для получения текущего времени
Наверное я на старой системе сижу, такого мана нет (RedHat 8.0). Эта posix-функция?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "пример из книги Стивенса 'UNIX network programmin, 2nd ed.'"  
Сообщение от Boris Polevoy on 20-Сен-06, 14:30 
>>tv_usec - это _количество_ микросекунд, тебе надо получить для отображения _количество_ миллисекунд,
>>соответствующее _тому_же_ временному интервалу.
>>0.2 сек = 200 мс = 200000 мкс = 200000000 нс
>>теперь понятно, что на что делить?
>>
>Наконец-то дошло :) Спасибо!
>
>>
>>>Что такое timespec, нигде этой структуры не видел?
>>
>>man clock_gettime - это самая правильная функция для получения текущего времени
>Наверное я на старой системе сижу, такого мана нет (RedHat 8.0). Эта
>posix-функция?

FreeBSD:
man clock_gettime
STANDARDS
     The clock_gettime(), clock_settime(), and clock_getres() system calls
     conform to IEEE Std 1003.1b-1993 (``POSIX.1'').

QNX6:
Classification:
POSIX 1003.1 (Realtime Extensions)

для простого ping хватит и gettimeofday(2), там особой точности не надо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру