The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"что возвращает системный вызов times, переносимо узнать uptime"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Библиотеки, функции)
Изначальное сообщение [ Отслеживать ]

"что возвращает системный вызов times, переносимо узнать uptime"  +/
Сообщение от Kane (ok) on 06-Апр-10, 10:38 
задача стоит узнать uptime системы или сделать какую то хоть засечку времени для временного контроля. это должно работать не только в linux, но и хотя бы в solaris.
точность высокая не нужна, 1 сек вполне достаточно поэтому использовать posix таймеры нет необходимости.

вот способ который будет работать только в linux ,  вызов sysinfo присутствует только в linux. Это непереносимо.

#include <sys/sysinfo.h>

int main (void)
{
    struct sysinfo info;

    int recf = sysinfo(&info);

    printf("recf=%d   \n\r" , recf);
    printf("Uptime = %d\n",info.uptime);

    return 0;
}


Второй способ будет работать почти везде, в Solaris точно

#include<sys/times.h>
#include<limits.h>
#include<unistd.h>
#include<time.h>


main()
{
clock_t ticks;
struct tms tmp;
long ticks_per_sec;
ticks=times(&tmp);

ticks_per_sec=sysconf(_SC_CLK_TCK);

printf("System up for %d seconds. ticks:%d tickspersec:%d \n"
, ticks/ticks_per_sec , ticks, ticks_per_sec);
}

Этот способ подходит всем, но я получаю непонятные значения.

на моей системе я получаю значения
17207405 sec   1720740538 ticks    100 ticks per second

Это 199 дней и не совсем понятно с какой точки отсчет.

в документации написано, что times возвращает количество tick с произвольной точки в прошлом.

times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately.  

у кого нить есть опыт использования times практический ? не будет так что кол-во тиков уйдет у меня вперед случайно?


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

Оглавление

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


1. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Doka (??) on 06-Апр-10, 11:59 

>
>Это 199 дней и не совсем понятно с какой точки отсчет.
>

uptime что выдает

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

2. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Kane (ok) on 06-Апр-10, 13:25 
>uptime что выдает

версия с использованием вызова sysinfo() работает правильно
она выдает такие же результаты что и команда uptime с консоли
несколько часов или минут, сколько там прошло со старта системы
но этот вариант не работает в solaris

а вот times() выдает непонятные результаты
хотя результат корректно растет на 1 каждую секунду

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

3. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Andrey Mitrofanov on 06-Апр-10, 13:40 
>а вот times() выдает непонятные результаты
>хотя результат корректно растет на 1 каждую секунду

Почему непонятные? Вполне понято Ж-D написано "number of clock ticks ... since an arbitrary point in the past".

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

4. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Kane (ok) on 06-Апр-10, 15:08 
>Почему непонятные? Вполне понято Ж-D написано "number of clock ticks ... since
>an arbitrary point in the past".

я читал естественно это место в man
просто как то неопределенно. как все таки выбирается эта точка в прошлом.
в принципе для моих целей сгодится.

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

5. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Andrey Mitrofanov on 06-Апр-10, 17:43 
>просто как то неопределенно. как все таки выбирается эта точка в прошлом.

ну, "arbitrary" же ж

arbitrary
   [↗ɑ:bɪtrɜrɪ] _a.
   1) произвольный
   2) капризный
   3) деспотический
   4) _мат. arbitrary constant произвольная постоянная; arbitrary signs and
   symbols условные знаки и обозначения

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

6. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Kane (ok) on 02-Июл-10, 11:32 
все таки я в смятении
на Debian 5  к примеру система выдает значения times() начиная с 1718110783  1718 миллионов
учитывая что в секунде 100 тиков
до переполнения которое наступает в 2147483647 остается всего 50 дней работы программы непрерывной

на RedHat к примеру начальное значения начинается от 456045334  примерно 456 миллионов

times ведь знаковое значение выдает
-1 означает ошибку
а все остальные значения в том числе отрицательные нет
т.е в моей ситуации время получается тикает от 1718110783 до 2147483647
а потом начинает от -2147483648 тикать до -1 уменьшаясь по модулю

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

7. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от guest (??) on 02-Июл-10, 17:23 
>до переполнения которое наступает в 2147483647 остается всего 50 дней работы программы
>непрерывной

К сожалению сейчас проверить негде, но как я помню clock_t на линуксах все таки не разу ни int и до переполнения  там ого-го.

Если не секрет каков смысл этого исследования?

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

8. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от Kane (ok) on 05-Июл-10, 11:01 
>К сожалению сейчас проверить негде, но как я помню clock_t на линуксах
>все таки не разу ни int и до переполнения  там
>ого-го.

там вот так сделано на 32 системах , в коде ядра смотрел
так что до переполнения 2 млрд всего

typedef long        __kernel_clock_t;
typedef __kernel_clock_t clock_t;

>Если не секрет каков смысл этого исследования?

переполнение мешает

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

9. "что возвращает системный вызов times, переносимо узнать upti..."  +/
Сообщение от guest email(??) on 05-Июл-10, 22:52 
>>Если не секрет каков смысл этого исследования?
>переполнение мешает

ну если дело только в нем, то забейте на -1
errno = 0;
t = times(...);
if (errno != 0)
     err(1, "times()");
да и поймать там ошибку не реально.

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

10. "что возвращает системный вызов times, переносимо узнать uptime"  +/
Сообщение от const86 (ok) on 13-Июл-10, 18:54 
>точность высокая не нужна, 1 сек вполне достаточно поэтому использовать posix таймеры нет необходимости.

Ну и что ж теперь из-за лишнего поля tv_nsec их не использовать?

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

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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