📄 gettimeofday.c
字号:
/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* stub for gettimeofday(): gettimeofday() is UNIX, not POSIX*//*-------------------------------------------------------------------*//* *//* gettimeofday *//* *//*-------------------------------------------------------------------*//* *//* #include <time.h> *//* *//* int gettimeofday( *//* struct timeval *tp, *//* struct timezone *tzp, *//* ); *//* *//*-------------------------------------------------------------------*//* *//* This function returns seconds and microseconds since midnight *//* January 1, 1970. The microseconds is actually only accurate to *//* the millisecond. *//* *//* Note: To pick up the definitions of structs timeval and timezone *//* from the <time.h> include file, the directive *//* _SOCKET_SOURCE must be used. *//* *//*-------------------------------------------------------------------*//* *//* RETURN VALUE *//* A 0 return value indicates that the call succeeded. A -1 return *//* value indicates an error occurred; errno is set to indicate the *//* error. *//* *//*-------------------------------------------------------------------*//* *//* ERRORS *//* EFAULT not implemented yet. *//* *//*-------------------------------------------------------------------*//* Changes: *//* 2-91 DR. Created. *//* *//*-------------------------------------------------------------------*//* need _SOCKET_SOURCE to pick up structs timeval and timezone in time.h */#ifndef _SOCKET_SOURCE# define _SOCKET_SOURCE#endif#include <time.h> /* structs timeval & timezone, difftime(), localtime(), mktime(), time() */#pragma intrinsic TIMERintgettimeofday(struct timeval *tp, struct timezone *tpz){ static unsigned long basetime = 0; static int dsttime = 0; static int minuteswest = 0; static int oldtime = 0; register int newtime; int TIMER(); /*-------------------------------------------------------------------*/ /* Setup a base from which all future time will be computed. */ /*-------------------------------------------------------------------*/ if ( basetime == 0 ) { time_t gmt_time; time_t loc_time; struct tm *loc_time_tm; gmt_time = time( NULL ); loc_time_tm = localtime( &gmt_time ) ; loc_time = mktime( loc_time_tm ); oldtime = TIMER(); basetime = (unsigned long) ( loc_time - (oldtime/1000) ); /*----------------------------------------------------------------*/ /* The calling process must be restarted if timezone or dst */ /* changes. */ /*----------------------------------------------------------------*/ minuteswest = (int) (difftime( loc_time, gmt_time ) / 60); dsttime = loc_time_tm->tm_isdst; } /*-------------------------------------------------------------------*/ /* Get the new time value. The timer value rolls over every 24 days, */ /* so if the delta is negative, the basetime value is adjusted. */ /*-------------------------------------------------------------------*/ newtime = TIMER(); if ( newtime < oldtime ) basetime += 2073600; oldtime = newtime; /*-------------------------------------------------------------------*/ /* Return the timestamp info. */ /*-------------------------------------------------------------------*/ tp->tv_sec = basetime + newtime/1000; tp->tv_usec = (newtime%1000) * 1000; /* only accurate to milli */ if (tpz) { tpz->tz_minuteswest = minuteswest; tpz->tz_dsttime = dsttime; } return 0;} /* gettimeofday() */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -