linux系統設置系統時間的方法

Linux系統設置系統時間有兩種方法:

1.使用命令date

2.使用系統調用settimeofday,gettimeofday

注意:不管使用上面哪一種方法都必須是root權限。

如果系統連接上了網絡,設置的時間和網絡時間不同,系統會自動使用網絡中的時間。

 

1.使用命令date

在命令行中可以使用:

 

sudo date --s "2020-6-30 10:10:10"

2.使用系統調用settimeofday

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>

static void time_set(int year,int month,int day,int hour,int min,int sec)
{
    struct tm tptr;
    struct timeval tv;

    tptr.tm_year = year - 1900;
    tptr.tm_mon = month - 1;
    tptr.tm_mday = day;
    tptr.tm_hour = hour;
    tptr.tm_min = min;
    tptr.tm_sec = sec;

    tv.tv_sec = mktime(&tptr);
    tv.tv_usec = 0;
    settimeofday(&tv, NULL);
    system(sudo hwclock -w);//將設置好的系統時間寫入到rtc中
}

C語言settimeofday()函數:設置當前時間戳

頭文件:

1

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

定義函數:

1

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

函數說明:

settimeofday()會把目前時間設成由tv 所指的結構信息,當地時區信息則設成tz 所指的結構。詳細的說明請參考gettimeofday()。

注意,在Linux下,只有root 權限才能使用此函數修改時間。

返回值:成功則返回0,失敗返回-1,錯誤代碼存於errno。

錯誤代碼:

EPERM  並非由root 權限調用settimeofday(),權限不夠。

EINVAL  時區或某個數據是不正確的,無法正確設置時間。

 

C語言gettimeofday()函數:獲取當前時間

頭文件:

1

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

定義函數:int gettimeofday (struct timeval * tv, struct timezone * tz);

函數說明:gettimeofday()會把目前的時間有tv 所指的結構返回,當地時區的信息則放到tz 所指的結構中。

timeval 結構定義爲:

1

2

3

4

struct timeval{

  long tv_sec; //秒

  long tv_usec; //微秒

};

timezone 結構定義爲:

1

2

3

4

5

struct timezone

{

  int tz_minuteswest; //和Greenwich 時間差了多少分鐘

  int tz_dsttime; //日光節約時間的狀態

};

上述兩個結構都定義在/usr/include/sys/time.h. tz_dsttime 所代表的狀態如下

1

2

3

4

5

6

7

8

9

10

11

DST_NONE //不使用

DST_USA //美國

DST_AUST //澳洲

DST_WET //西歐

DST_MET //中歐

DST_EET //東歐

DST_CAN //加拿大

DST_GB //大不列顛

DST_RUM //羅馬尼亞

DST_TUR //土耳其

DST_AUSTALT //澳洲(1986 年以後)

返回值:成功則返回0,失敗返回-1,錯誤代碼存於errno。

附加說明:EFAULT 指針tv 和tz 所指的內存空間超出存取權限。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章