gettimeofday

GETTIMEOFDAY(2) Ð ÑководÑÑво пÑогÑаммиÑÑа Linux GETTIMEOFDAY(2)



ÐÐЯ
       gettimeofday, settimeofday - полÑÑаеÑ/ÑÑÑанавливаеÑ
       вÑемÑ

ÐÐÐÐÐ
       #include <sys/time.h>

       int gettimeofday(struct timeval *tv, struct timezone *tz);

       int settimeofday(const struct timeval *tv, const struct timezone *tz);

   ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc
   (Ñм. feature_test_macros(7)):

       settimeofday():
           наÑÐ¸Ð½Ð°Ñ Ñ glibc 2.19:
               _DEFAULT_SOURCE
           в glibc 2.19 и ÑÑаÑее:
               _BSD_SOURCE

ÐÐÐСÐÐÐÐ
       ФÑнкÑÐ¸Ñ gettimeofday() и settimeofday() позволÑÑÑ
       полÑÑиÑÑ Ð¸ задаÑÑ Ð²ÑемÑ, а Ñакже ÑаÑовой поÑÑ.
       ÐÑгÑÐ¼ÐµÐ½Ñ tv Ð¸Ð¼ÐµÐµÑ Ñип struct timeval (опÑеделÑн в
       <sys/time.h>):

           struct timeval {
               time_t      tv_sec;     /* ÑекÑÐ½Ð´Ñ */
               suseconds_t tv_usec;    /* микÑоÑекÑÐ½Ð´Ñ */
           };

       и задаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑекÑнд и микÑоÑекÑнд,
       пÑоÑедÑÐ¸Ñ Ñ Ð½Ð°Ñала ÑпоÑи (Ñм. time(2)). ÐÑгÑÐ¼ÐµÐ½Ñ tz
       Ð¸Ð¼ÐµÐµÑ Ñип struct timezone:

           struct timezone {
               int tz_minuteswest;     /* колиÑеÑÑво минÑÑ Ð·Ð°Ð¿Ð°Ð´Ð½ÐµÐµ ÐÑинвиÑа */
               int tz_dsttime;         /* Ñип коÑÑекÑиÑовки DST */
           };

       ÐÑли tv или tz имеÑÑ Ð·Ð½Ð°Ñение NULL, Ñо
       ÑооÑвеÑÑÑвÑÑÑÐ°Ñ ÑÑÑÑкÑÑÑа не задана и не бÑдеÑ
       возвÑаÑена (однако пÑи компилÑÑии бÑдÑÑ
       вÑдаваÑÑÑÑ Ð¿ÑедÑпÑеждениÑ, еÑли tv Ñавно NULL).

       ÐолÑзоваÑÑÑÑ ÑÑÑÑкÑÑÑой timezone не ÑекомендÑеÑÑÑ;
       знаÑением аÑгÑменÑа tz в болÑÑинÑÑве ÑлÑÑаев
       должен бÑÑÑ NULL (Ñм. ÐÐÐÐЧÐÐÐЯ далее).

       Ð Linux ÑÑÑеÑÑвÑÐµÑ ÑпеÑиÑиÑеÑкое понÑÑие
       «вÑеменной Ñдвиг» (warp clock), ÑвÑзанное Ñ
       ÑиÑÑемнÑм вÑзовом settimeofday(), коÑоÑÑй
       обÑазÑеÑÑÑ Ð¿Ñи Ñамом пеÑвом вÑзове (поÑле
       загÑÑзки), еÑли аÑгÑÐ¼ÐµÐ½Ñ tz не Ñавен NULL,
       аÑгÑÐ¼ÐµÐ½Ñ tv Ñавен NULL и поле tz_minuteswest не
       Ñавно нÑÐ»Ñ (в ÑÑом ÑлÑÑае знаÑение полÑ
       tz_dsttime должно бÑÑÑ Ñавно нÑлÑ). Ð ÑÑом ÑлÑÑае
       пÑедполагаеÑÑÑ, ÑÑо вÑÐµÐ¼Ñ Ð°Ð¿Ð¿Ð°ÑаÑнÑÑ ÑаÑов (CMOS
       clock) меÑÑное и к Ð½ÐµÐ¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½
       ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑилоÑÑ Ð²ÑемÑ
       UTC. Ðо, как Ð¼Ñ Ð¸ говоÑили, иÑполÑзоваÑÑ ÑÑоÑ
       меÑод не ÑекомендÑеÑÑÑ.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑÑпеÑном вÑполнении gettimeofday() и settimeofday()
       возвÑаÑаÑÑ 0, или -1 в ÑлÑÑае оÑибки (errno
       ÑÑÑанавливаеÑÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑее знаÑение).

ÐШÐÐÐÐ
       EFAULT Ðдно из знаÑений в tv или tz наÑодиÑÑÑ
              вне доÑÑÑпного адÑеÑного пÑоÑÑÑанÑÑва.

       EINVAL ÐепÑавилÑнÑй ÑаÑовой поÑÑ (или ÑÑо-Ñо еÑÑ).

       EPERM  У вÑзÑваÑÑего пÑоÑеÑÑа недоÑÑаÑоÑно пÑав
              Ð´Ð»Ñ Ð²Ñзова settimeofday(); в Linux Ð´Ð»Ñ ÑÑого
              ÑÑебÑеÑÑÑ Ð¼Ð°Ð½Ð´Ð°Ñ CAP_SYS_TIME.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       SVr4, 4.3BSD. Ð POSIX.1-2001 опиÑан gettimeofday(), но неÑ
       settimeofday(). Ð POSIX.1-2008 вÑзов gettimeofday() помеÑен
       как ÑÑÑаÑевÑий, вмеÑÑо него ÑекомендÑеÑÑÑ
       иÑполÑзоваÑÑ clock_gettime(2).

ÐÐÐÐЧÐÐÐЯ
       Ðа вÑемÑ, возвÑаÑаемое gettimeofday(), влиÑÑÑ
       ÑкаÑки в ÑиÑÑемном вÑемени (напÑимеÑ, еÑли
       ÑиÑÑемнÑй админиÑÑÑаÑÐ¾Ñ Ð²ÑÑÑнÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»
       ÑиÑÑемное вÑемÑ). ÐÑли вам ÑÑебÑÑÑÑÑ
       однообÑазно ÑвелиÑиваÑÑееÑÑ Ð²ÑемÑ, ÑмоÑÑиÑе
       clock_gettime(2).

       ÐÐ»Ñ ÑабоÑÑ Ñо ÑÑÑÑкÑÑÑой timeval ÑÑÑеÑÑвÑÑÑ Ð¼Ð°ÐºÑоÑÑ,
       опиÑаннÑе в timeradd(3).

       ÐбÑÑно, Ð¿Ð¾Ð»Ñ struct timeval имеÑÑ Ñип long.

   Ðоле tz_dsttime
       Ð ÑиÑÑÐµÐ¼Ð°Ñ Ñ Ð½Ðµ ÑдÑами Linux, но Ñ glibc, полÑ
       tz_dsttime из struct timezone вÑзов gettimeofday() пÑиÑвоиÑ
       ненÑлевое знаÑение, еÑли в ÑекÑÑем ÑаÑовом
       поÑÑе Ñже пÑименÑлоÑÑ Ð¸Ð»Ð¸ бÑÐ´ÐµÑ Ð¿ÑименÑÑÑÑÑ
       пÑавило пеÑеÑода на леÑнее вÑемÑ. Ð ÑÑом
       ÑмÑÑле ÑÑо зеÑкалÑно оÑÑÐ°Ð¶Ð°ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñение
       daylight(3) Ð´Ð»Ñ ÑекÑÑего поÑÑа. Ð Linux Ñ glibc
       знаÑение Ð¿Ð¾Ð»Ñ tz_dsttime из struct timezone никогда
       не иÑполÑзÑеÑÑÑ Ð² settimeofday() или gettimeofday().
       Таким обÑазом, ÑледÑÑÑий Ð°Ð±Ð·Ð°Ñ Ð¿ÑедÑÑавлÑеÑ
       ÑолÑко иÑÑоÑиÑеÑкий инÑеÑеÑ.

       Ð ÑÑаÑÑÑ ÑиÑÑÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»Ðµ tz_dsttime ÑодеÑжиÑ
       ÑимволÑнÑÑ ÐºÐ¾Ð½ÑÑанÑÑ (знаÑÐµÐ½Ð¸Ñ Ð¿ÑиведенÑ
       ниже), коÑоÑÐ°Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾
       Ñезонной коÑÑекÑии вÑемени (Daylight Saving Time)
       (замеÑание: ÑÑа велиÑина поÑÑоÑнна и
       ÑказÑÐ²Ð°ÐµÑ Ð»Ð¸ÑÑ Ð½Ð° алгоÑиÑм коÑÑекÑии).
       СÑÑеÑÑвÑÑÑие алгоÑиÑÐ¼Ñ Ñезонной коÑÑекÑии:

           DST_NONE     /* без коÑÑекÑии (без DST) */
           DST_USA      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ Ð¡Ð¨Ð */
           DST_AUST     /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐвÑÑÑалии */
           DST_WET      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ Ðападной ÐвÑÐ¾Ð¿Ñ */
           DST_MET      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ Ð¦ÐµÐ½ÑÑалÑной ÐвÑÐ¾Ð¿Ñ */
           DST_EET      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐоÑÑоÑной ÐвÑÐ¾Ð¿Ñ */
           DST_CAN      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐÐ°Ð½Ð°Ð´Ñ */
           DST_GB       /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐеликобÑиÑании и ÐÑландии */
           DST_RUM      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ Ð ÑмÑнии */
           DST_TUR      /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ Ð¢ÑÑÑии */
           DST_AUSTALT  /* коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐвÑÑÑалии наÑÐ¸Ð½Ð°Ñ Ñ 1986 года */

       РазÑмееÑÑÑ, коÑÑекÑÐ¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑÐ°Ð½Ñ Ð½ÐµÐ»ÑзÑ
       опиÑаÑÑ Ð¿ÑоÑÑÑм алгоÑиÑмом, Ñак как ÑÑÐ¾Ñ ÑакÑоÑ
       Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð´Ð°Ð¶Ðµ Ð¾Ñ Ð½ÐµÐ¿ÑедÑказÑемÑÑ
       полиÑиÑеÑÐºÐ¸Ñ ÑеÑений. ÐоÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ð¼ÐµÑод
       пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов болÑÑе не
       иÑполÑзÑеÑÑÑ.

СÐÐТРÐТРТÐÐÐÐ
       date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3),
       timeradd(3), capabilities(7), time(7), vdso(7)



Linux                             2016-03-15                   GETTIMEOFDAY(2)