linux调用一个函数失败 打印错误,linux下settimeofday函数调用失败,何故?解决办法...
當(dāng)前位置:我的異常網(wǎng)? C語(yǔ)言???linux下settimeofday函數(shù)調(diào)用失敗,何故?解決辦法
linux下settimeofday函數(shù)調(diào)用失敗,何故?解決辦法
www.myexceptions.net??網(wǎng)友分享于:2014-11-29??瀏覽:0次
linux下settimeofday函數(shù)調(diào)用失敗,何故?
GCC成功,可以運(yùn)行,但就是該函數(shù)調(diào)用失敗,返回值-1;
我用ROOT帳號(hào)GCC,再執(zhí)行,也是這樣。
--------------------------------------------------------------
#include???
#include
#include
#include
#include?"stdlib.h"
int???main(void)
{
struct?????tm???*t_tm;
struct?timeval?t_timeval;
time_t?t_timet;
t_timet=time(NULL);
t_tm=localtime(&t_timet);
printf("\n\ncurrent?system??UTC?time:%s\n",?asctime(t_tm));
t_tm->tm_hour=18;
t_tm->tm_min=18;
t_tm->tm_sec=18;
t_tm->tm_year=18;
t_tm->tm_mon=5;?//月份(從一月開(kāi)始,0代表一月)?-?取值區(qū)間為[0,11]
t_tm->tm_mday=18;??//年份,其值從1900開(kāi)始
t_timet=mktime(t_tm);
t_timeval.tv_sec=t_timet;
t_timeval.tv_usec=0;
int?rec?=?settimeofday(&t_timeval,NULL);
printf("modifyed??time:%s\nsettime?return?code:%d\n\n",?asctime(t_tm),rec);
//printf("local?time:%s\n",?ctime(&tvt));
return???0;
}
------解決思路----------------------
檢查下errno。
------解決思路----------------------
單步調(diào)試看看?t_timet和rec的值。
------解決思路----------------------
GETTIMEOFDAY
Section:?Linux?Programmer's?Manual?(2)
Updated:?2004-05-27
--------------------------------------------------------------------------------
NAME
gettimeofday,?settimeofday?-?get?/?set?time
SYNOPSIS
#include?
int?gettimeofday(struct?timeval?*tv,?struct?timezone?*tz);
int?settimeofday(const?struct?timeval?*tv?,?const?struct?timezone?*tz);
DESCRIPTION
The?functions?gettimeofday?and?settimeofday?can?get?and?set?the?time?as?well?as?a?timezone.?The?tv?argument?is?a?timeval?struct,?as?specified?in?:
struct?timeval?{
time_t??????????tv_sec;?????????/*?seconds?*/
suseconds_t?????tv_usec;????????/*?microseconds?*/
};
and?gives?the?number?of?seconds?and?microseconds?since?the?Epoch?(see?time(2)).?The?tz?argument?is?a?timezone?:
struct?timezone?{
int?????tz_minuteswest;?/*?minutes?W?of?Greenwich?*/
int?????tz_dsttime;?????/*?type?of?dst?correction?*/
};
The?use?of?the?timezone?struct?is?obsolete;?the?tz_dsttime?field?has?never?been?used?under?Linux?-?it?has?not?been?and?will?not?be?supported?by?libc?or?glibc.?Each?and?every?occurrence?of?this?field?in?the?kernel?source?(other?than?the?declaration)?is?a?bug.?Thus,?the?following?is?purely?of?historic?interest.
The?field?tz_dsttime?contains?a?symbolic?constant?(values?are?given?below)?that?indicates?in?which?part?of?the?year?Daylight?Saving?Time?is?in?force.?(Note:?its?value?is?constant?throughout?the?year?-?it?does?not?indicate?that?DST?is?in?force,?it?just?selects?an?algorithm.)?The?daylight?saving?time?algorithms?defined?are?as?follows?:
DST_NONE?????/*?not?on?dst?*/
DST_USA?????/*?USA?style?dst?*/
DST_AUST????/*?Australian?style?dst?*/
DST_WET?????/*?Western?European?dst?*/
DST_MET?????/*?Middle?European?dst?*/
DST_EET?????/*?Eastern?European?dst?*/
DST_CAN?????/*?Canada?*/
DST_GB??????/*?Great?Britain?and?Eire?*/
DST_RUM?????/*?Rumania?*/
DST_TUR?????/*?Turkey?*/
DST_AUSTALT?/*?Australian?style?with?shift?in?1986?*/
Of?course?it?turned?out?that?the?period?in?which?Daylight?Saving?Time?is?in?force?cannot?be?given?by?a?simple?algorithm,?one?per?country;?indeed,?this?period?is?determined?by?unpredictable?political?decisions.?So?this?method?of?representing?time?zones?has?been?abandoned.?Under?Linux,?in?a?call?to?settimeofday?the?tz_dsttime?field?should?be?zero.
Under?Linux?there?is?some?peculiar?`warp?clock'?semantics?associated?to?the?settimeofday?system?call?if?on?the?very?first?call?(after?booting)?that?has?a?non-NULL?tz?argument,?the?tv?argument?is?NULL?and?the?tz_minuteswest?field?is?nonzero.?In?such?a?case?it?is?assumed?that?the?CMOS?clock?is?on?local?time,?and?that?it?has?to?be?incremented?by?this?amount?to?get?UTC?system?time.?No?doubt?it?is?a?bad?idea?to?use?this?feature.
The?following?macros?are?defined?to?operate?on?a?struct?timeval?:
#define???????timerisset(tvp)\
((tvp)->tv_sec
------解決思路----------------------
(tvp)->tv_usec)
#define???????timercmp(tvp,?uvp,?cmp)\
((tvp)->tv_sec?cmp?(uvp)->tv_sec
------解決思路----------------------
\
(tvp)->tv_sec?==?(uvp)->tv_sec?&&\
(tvp)->tv_usec?cmp?(uvp)->tv_usec)
#define???????timerclear(tvp)\
((tvp)->tv_sec?=?(tvp)->tv_usec?=?0)
If?either?tv?or?tz?is?null,?the?corresponding?structure?is?not?set?or?returned.
Only?the?super?user?may?use?settimeofday.
RETURN?VALUE
gettimeofday?and?settimeofday?return?0?for?success,?or?-1?for?failure?(in?which?case?errno?is?set?appropriately).
ERRORS
EFAULT
One?of?tv?or?tz?pointed?outside?the?accessible?address?space.
EINVAL
Timezone?(or?something?else)?is?invalid.
EPERM
The?calling?process?has?insufficient?privilege?to?call?settimeofday;?under?Linux?the?CAP_SYS_TIME?capability?is?required.
NOTE
The?prototype?for?settimeofday?and?the?defines?for?timercmp,?timerisset,?timerclear,?timeradd,?timersub?are?(since?glibc2.2.2)?only?available?if?_BSD_SOURCE?is?defined?(either?explicitly,?or?implicitly,?by?not?defining?_POSIX_SOURCE?or?compiling?with?the?-ansi?flag).
Traditionally,?the?fields?of?struct?timeval?were?longs.
CONFORMING?TO
SVr4,?BSD?4.3.?POSIX?1003.1-2001?describes?gettimeofday()?but?not?settimeofday().
SEE?ALSO
date(1),?adjtimex(2),?time(2),?ctime(3),?ftime(3),?capabilities(7)
--------------------------------------------------------------------------------
文章評(píng)論
總結(jié)
以上是生活随笔為你收集整理的linux调用一个函数失败 打印错误,linux下settimeofday函数调用失败,何故?解决办法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux系统云主机教程,新开的linu
- 下一篇: centos linux内核编译环境,C