整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          C語言時間函數(shù)(4)之Linux下設(shè)置時間的函數(shù)stime()和settimeofday()

          標(biāo)準(zhǔn)C庫中只有獲取系統(tǒng)時間的API,好像還沒有設(shè)置系統(tǒng)時間的API,本文將談?wù)勅绾卧趌inux平臺設(shè)置系統(tǒng)時間,最后給出一個與平臺無關(guān)的設(shè)置系統(tǒng)時間的封閉函數(shù)。

          linux是如何管理時間的?

          在系統(tǒng)啟動時,Linux操作系統(tǒng)將時間從CMOS中讀到系統(tǒng)時間變量中,以后修改時間通過修改系統(tǒng)時間實現(xiàn)。為了保持系統(tǒng)時間與CMOS時間的一致性,Linux每隔11分鐘會將系統(tǒng)時間寫入CMOS,同步時間。從這可以看出,獲取系統(tǒng)時間有兩個途徑,一種是從CMOS中讀,一種是從系統(tǒng)中讀,但修改時間卻只有一種,即修改linux系統(tǒng)中的時間,而修改CMOS中的時間是無效的,因為CMOS中的時間會被定時重寫掉。另外還有一點要注意,修改了系統(tǒng)時間并不是馬上生效的,假如你修改了系統(tǒng)時間并馬上關(guān)機,再開機的時候,時間還是原來的,因為修改的時間還沒有來得及寫入CMOS中。

          Linux下設(shè)置系統(tǒng)時間:

          1.Linux下設(shè)置系統(tǒng)時間的函數(shù)有好幾個,先來看看最常用的stime()函數(shù),這個函數(shù)只能精確到秒。

          #define /*如果你使用的是glib2的話,必須先定義這個宏才能使用*/

          #include

          int stime(time_t *t);

          參數(shù)說明:

          t是以秒為單位的時間值,從GMT1970年1月1日0時0分0秒開始計算。

          返回值:

          成功返回0,錯誤返回-1,errno錯誤碼,EFAULT表示傳遞的參數(shù)錯誤,如時間值是無效的值,EPERM表示權(quán)限不夠,注意只有root用戶才有修改系統(tǒng)時間的權(quán)限。如果要讓普通程序修改系統(tǒng)時間,可以先切換到root用戶操作,修改完成后,再切換到普通用戶,或者用命令chmod +s給執(zhí)行文件加上root用戶的權(quán)限。

          例子:

          int main(void)
          {
                  long int t = 111111111;
                  printf("設(shè)置系統(tǒng)時間前的時間是:");
                  fflush(stdout);
                  system("date");
                  stime(&t);
                  printf("設(shè)置系統(tǒng)時間后的時間是:");
                  fflush(stdout);
                  system("date");
                  return 0;
          }

          
          
          

          2.通過()函數(shù)來設(shè)置系統(tǒng)時間,這個函數(shù)設(shè)置的精度可以精確到微秒。

          #include

          linux顯示時間到秒_linux系統(tǒng)時間時間秒數(shù)_linux秒數(shù)轉(zhuǎn)為時間

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

          struct timeval {

          time_t tv_sec; /* seconds */

          tv_usec; /* */

          };

          struct {

          int ; /* minutes west of */

          int ; /* type of DST */

          };

          tz參數(shù)為時區(qū),時區(qū)結(jié)構(gòu)中在linux中不支持,應(yīng)該置為0,通常將參數(shù)tz設(shè)置為NULL,表示使用當(dāng)前系統(tǒng)的時區(qū)。該函數(shù)是glib中的,但在mingw中沒有實現(xiàn)。

          舉例:

           1 #include 
            2 #include 
            3 #include 
            4 
            5 int main(void)
            6 {
            7         struct timeval stime;
            8 
            9         gettimeofday(&stime,NULL);
           10         printf("現(xiàn)在的時間秒數(shù)是:%ld,毫秒數(shù)是:%ld\n現(xiàn)在的時間是:",stime.tv_sec,stime.tv_usec);
           11         fflush(stdout);
           12         system("date");
           13 
           14         stime.tv_sec = 123456789;
           15         settimeofday(&stime,NULL);
           16         printf("現(xiàn)在的時間秒數(shù)是:%ld,毫秒數(shù)是:%ld\n現(xiàn)在的時間是:",stime.tv_sec,stime.tv_usec);
           17         fflush(stdout);
           18         system("date");
           19 
           20 
           21 
           22         return 0;
           23 }
          

          結(jié)果:

          linux顯示時間到秒_linux系統(tǒng)時間時間秒數(shù)_linux秒數(shù)轉(zhuǎn)為時間

          3.設(shè)置CMOS時間,其實它是通過RTC(Real-time clock)設(shè)備驅(qū)動來完成的,你可以用ioctl()函數(shù)來設(shè)置時間,當(dāng)然也可以通過操作/dev/rtc設(shè)備文件,在此就不詳細說明了。

          二、一個封裝的設(shè)置系統(tǒng)時間的函數(shù)

          //設(shè)置成功返回true,否則返回false

          bool (struct tm& t)

          #ifdef _WIN32

          st;

          memset(&st, 0, sizeof());

          st.wYear = t.tm_year + 1970; //注意struct tm結(jié)構(gòu)中的年是從1970年開始的計數(shù)

          st.wMonth = t.tm_mon + 1; //注意struct tm結(jié)構(gòu)中的月份是從0開始的

          st.wDay = t.tm_mday;

          st.wHour = t.tm_hour;

          st.wMinute = t.tm_min;

          st.wSecond = t.tm_sec;

          if(!(&st))

          return true;

          else

          return false;

          #else

          //將struct tm結(jié)構(gòu)時間轉(zhuǎn)換成GMT時間time_t

          struct time_t st;

          st = mktime(&t);

          if(st==-1)

          return false;

          if(!stime(st))

          return true;

          else

          return false;

          #endif


          主站蜘蛛池模板: 四虎一区二区成人免费影院网址| 一区二区三区在线|欧| 国产乱人伦精品一区二区在线观看| 日韩有码一区二区| 日韩中文字幕精品免费一区| 精品人妻一区二区三区毛片| 日本在线电影一区二区三区| 亚洲丶国产丶欧美一区二区三区| 亚洲国产精品自在线一区二区| 日韩动漫av在线播放一区| 国产成人高清亚洲一区久久| 亚洲国产高清在线精品一区| 精品人伦一区二区三区潘金莲| 国产精品区一区二区三在线播放| 国产一区二区三区在线视頻| 国产伦精品一区二区免费 | AV怡红院一区二区三区| 在线观看精品视频一区二区三区| 精品国产一区二区三区不卡| 精品国产一区二区三区色欲| 精品少妇人妻AV一区二区三区| 国产精品福利一区二区| 亚洲熟妇AV一区二区三区浪潮 | 国产乱码精品一区二区三区| 99国产精品欧美一区二区三区| 日韩免费一区二区三区| 日本精品啪啪一区二区三区| 综合激情区视频一区视频二区| 激情综合丝袜美女一区二区| 中文字幕亚洲一区二区va在线| 日本高清成本人视频一区| 国产一区二区三区91| 亚洲第一区视频在线观看| 国产91精品一区二区麻豆网站| 国产精品无码一区二区在线观 | 东京热无码一区二区三区av| 亚洲AV综合色区无码一区| 亚洲一区精品视频在线| 国产激情一区二区三区在线观看 | 不卡一区二区在线| 97精品国产一区二区三区|