新聞中心
Linux系統(tǒng)是一款功能強大的開源操作系統(tǒng),非常受歡迎。在Linux系統(tǒng)中,時間設(shè)置是至關(guān)重要的一項任務(wù)。正確地設(shè)置時間可以確保系統(tǒng)的運作順暢,維護數(shù)據(jù)完整性,確保日志記錄可靠,以及順利運行各種常規(guī)任務(wù)。如果您在使用Linux系統(tǒng)時需要設(shè)置時間,那么本文將為您提供一些有用的指導(dǎo)。

雁塔網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
到底什么是時間?
在計算機系統(tǒng)中,時間是用于記錄事件的概念。此概念通常用于記錄計算機上的進程或任務(wù)的開始或結(jié)束時間。也可以用于記錄其他事件,如文件創(chuàng)建或修改時間,或者用于計算工作時間。
Linux中如何設(shè)置時間?
Linux系統(tǒng)默認情況下使用UTC時間(協(xié)調(diào)世界時)作為其時間基準。UTC時間是世界上通用的時間標準,在全球各個時區(qū)中通用。
設(shè)置Linux時間的過程可以在終端中通過輸入date命令來完成。下面是一些在Linux系統(tǒng)中設(shè)置時間的基本方法:
1. 設(shè)置系統(tǒng)時間與日期
在Linux中,需要使用date命令來設(shè)置系統(tǒng)時間和日期。以下是使用date命令設(shè)置當前日期和時間的基本語法:
$ date [mmddhhmmyyyy.ss]
其中mm代表月份,dd代表日期,hh代表小時,mm代表分鐘,yyyy代表年份,ss代表秒數(shù)。
2. 設(shè)置硬件時間
硬件時鐘是存儲在計算機主板上的內(nèi)部計時器芯片。它包括一個實時時鐘以及鬧鐘(定時器)等功能。在Linux中,設(shè)置硬件時鐘的方法依賴于硬件和Linux版本。在大多數(shù)情況下,您可以使用hwclock命令來設(shè)置系統(tǒng)硬件時鐘。以下是設(shè)置硬件時間的基本語法:
$ hwclock –set –date [mmddhhmmYYYY]
3. 利用NTP同步時間
NTP(網(wǎng)絡(luò)時間協(xié)議)是計算機網(wǎng)絡(luò)中的一種協(xié)議,它用于同步計算機的時間。使用NTP同步計算機時間可以保證計算機時鐘的準確性。當您連接到互聯(lián)網(wǎng)時,可以使用NTP協(xié)議從網(wǎng)絡(luò)上獲取準確的時間。以下是在Linux系統(tǒng)中設(shè)置NTP服務(wù)器的基本語法:
$ ntpdate ntp.server.com
4. 更改時區(qū)
在Linux系統(tǒng)中,每個時區(qū)被表示為TZ環(huán)境變量。默認情況下,Linux使用GMT(格林威治標準時間)。如果要更改時區(qū),可以使用tzselect命令。以下是更改時區(qū)的基本語法:
$ tzselect
5. 更改日期格式
Linux中的日期格式可以通過在date命令中添加選項來更改。以下是更改日期格式的基本語法:
$ date +%m-%d-%Y
利用這些方法,您可以在Linux操作系統(tǒng)上輕松地設(shè)置日期和時間。需要注意的是,更改時間設(shè)置操作可以影響操作系統(tǒng)的文件系統(tǒng),因此請謹慎操作。
結(jié)論:
時間是一種有用的工具,在計算機系統(tǒng)中具有許多用途。正常的計算機操作需要準確的時間記錄,而Linux系統(tǒng)中的時間設(shè)置也可以輕松地完成。如果需要更改Linux系統(tǒng)中的時間設(shè)置,您可以使用本文所提供的幾種方法來實現(xiàn)。在進行操作時請注意操作細節(jié),以免造成數(shù)據(jù)丟失。
相關(guān)問題拓展閱讀:
- Linux下一般用什么實現(xiàn)某個等待事件
- 如何讓linux 2.6.18-274版本 支持timerfd
- linux手冊翻譯——timerfd_create()
Linux下一般用什么實現(xiàn)某個等待事件
setTimeout(function(){},1000);
linux 提供褲知文件監(jiān)控機制inotify 你可以使用它的api,監(jiān)控文件的創(chuàng)建然后執(zhí)行你想要改純散 的行為。至于有沒有其他程序核氏可用就不知道了
如何讓linux 2.6.18-274版本 支持timerfd
timerfd是Linux為用戶程序提供的一個定時器接口。這個接口基于文件描述符,通過文件描述符的可讀事件進行超時通知,所以能夠被用于select/poll的應(yīng)用場景。
timerfd是linux內(nèi)核2.6.25版本中加入的孝唯借口。
timerfd、eventfd、signalfd配合epoll使用,可以構(gòu)造出一個零輪詢的程序,但程序沒有處理的事件時,程序是被阻塞的。這樣的話在某些移動設(shè)備上程序更省電。
clock_gettime函數(shù)可以獲取系統(tǒng)時鐘,精確到納秒。需要在編譯時指定庫:-lrt??梢垣@取兩種類型事譽謹件:
CLOCK_REALTIME:相對時間,從1970.1.1到巧虛培目前的時間。更改系統(tǒng)時間會更改獲取的值。也就是,它以系統(tǒng)時間為坐標。
CLOCK_MONOTONIC:與CLOCK_REALTIME相反,它是以絕對時間為準,獲取的時間為系統(tǒng)重啟到現(xiàn)在的時間,更改系統(tǒng)時間對齊沒有影響。
timerfd_create:
生成一個定時器對象,返回與之關(guān)聯(lián)的文件描述符。接收兩個入?yún)?,一個是clockid,填寫
CLOCK_REALTIME或者CLOCK_MONOTONIC,參數(shù)意義同上。第二個可以傳遞控制標志:TFD_NONBLOCK(非阻
塞),TFD_CLOEXEC(同O_CLOEXEC)
注:timerfd的進度要比usleep要高。
timerfd_settime:能夠啟動和停止定時器;可以設(shè)置第二個參數(shù):flags,0表示是相對定時器,TFD_TIMER_ABSTIME表示是絕對定時器。
第三個參數(shù)設(shè)置超時時間,如果為0則表示停止定時器。定時器設(shè)置超時方法:
1、設(shè)置超時時間是需要調(diào)用
clock_gettime
獲取當前時間,如果是絕對定時器,那么需要獲取
CLOCK_REALTIME,在加上要超時的時間。如果是相對定時器,要獲取
CLOCK_MONOTONIC時間。
2、數(shù)據(jù)結(jié)構(gòu):
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespec it_interval; /* Interval for periodic timer */
struct timespec it_value; /* Initial expiration */
};
it_value是首次超時時間,需要填寫從
clock_gettime獲取的時間,并加上要超時的時間。
it_interval是后續(xù)周期性超時時間,是多少時間就填寫多少。
注意一個容易犯錯的地方:tv_nsec加上去后一定要判斷是否超出(如果超過要秒加一),否則會設(shè)置失敗。
it_interval不為0則表示是周期性定時器。
it_value和
it_interval都為0表示停止定時器。
注: timerfd_create之一個參數(shù)和
clock_gettime的之一個參數(shù)都是
CLOCK_REALTIME或者
CLOCK_MONOTONIC,
timerfd_settime的第二個參數(shù)為0(相對定時器)或者TFD_TIMER_ABSTIME,三者的關(guān)系:
1、如果
timerfd_settime設(shè)置為
TFD_TIMER_ABSTIME(決定時間),則后面的時間必須用
clock_gettime來獲取,獲取時設(shè)置
CLOCK_REALTIME還是
CLOCK_MONOTONIC取決于
timerfd_create設(shè)置的值。
2、如果
timerfd_settime設(shè)置為
(相對定時器),則后面的時間必須用相對時間,就是:
new_value.
it_value
.tv_nsec =;
new_value.
it_value
.tv_sec = 3;
new_value.
it_interval
.tv_sec = 0;
new_value.
it_interval
.tv_nsec =;
read函數(shù)可以讀timerfd,讀的內(nèi)容為uint_64,表示超時次數(shù)。
看一段代碼例子:
#include
#include
#include
#include
#include
#include
#include /* Definition of uint64_t */
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
void printTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
printf(“printTime: current time:%ld.%ld “, tv.tv_sec, tv.tv_usec);
}
int main(int argc, char *argv)
{
struct timespec now;
if (clock_gettime(CLOCK_REALTIME, &now) == -1)
handle_error(“clock_gettime”);
struct itimerspec new_value;
new_value.it_value.tv_sec = now.tv_sec + atoi(argv);
new_value.it_value.tv_nsec = now.tv_nsec;
new_value.it_interval.tv_sec = atoi(argv);
new_value.it_interval.tv_nsec = 0;
int fd = timerfd_create(CLOCK_REALTIME, 0);
if (fd == -1)
handle_error(“timerfd_create”);
if (timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL) == -1)
handle_error(“timerfd_settime”);
printTime();
printf(“timer started\n”);
for (uint64_t tot_exp = 0; tot_exp );)
{
uint64_t exp;
ssize_t s = read(fd, &exp, sizeof(uint64_t));
if (s != sizeof(uint64_t))
handle_error(“read”);
tot_exp += exp;
printTime();
printf(“read: %llu; total=%llu\n”,exp, tot_exp);
}
exit(EXIT_SUCCESS);
}
root@node1:/home/c_test/unix_test# ./timerfd
printTime: current time:.timer started
printTime: current time:.read: 1; total=1
printTime: current time:.read: 1; total=2
printTime: current time:.read: 1; total=3
printTime: current time:.read: 1; total=4
之一個參數(shù)為之一次定時器到期間隔,第二個參數(shù)為定時器的間隔,第三個參數(shù)為定時器多少次則退出。
timerfd簡單的性能測試:
申請1000個定時器,超時間定位1s,每秒超時一次,發(fā)現(xiàn)cpu占用率在3.0G的cpu上大概為1%,10000個定時器的話再7%左右,而且不會出
現(xiàn)同時超時兩個的情況,如果有printf到前臺,則一般會出現(xiàn)定時器超時多次(3-5)才回調(diào)。
linux手冊翻譯——timerfd_create()
timerfd_create, timerfd_settime, timerfd_gettime – timers that notify via file descriptors
這些系統(tǒng)調(diào)用創(chuàng)建并操作一個計時器,計時器通過文件描述符來通知計時到期,這樣就可以通過 select(2)、poll(2) 和 epoll(7) 監(jiān)視文件描述符從而監(jiān)聽計時器。
這三個系統(tǒng)調(diào)用的使用類似于 timer_create(2)、timer_settime(2) 和 timer_gettime(2) 。 (沒有與timer_getoverrun(2) 類似的系統(tǒng)調(diào)用,因為該功能由 read(2) 提供,如下所述。)
int timerfd_create(int clockid, int flags);
timerfd_create() 創(chuàng)建一個新的計時器對象,并返回引用該計時器的文件描述符。 clockid 參數(shù)指定使用那種類型的時鐘(clock)來實現(xiàn)計時器(timer),并且必須是以下之一:
有關(guān)上述時鐘的更多詳細信息,請參閱clock_getres(2)。
可以使用clock_gettime(2) 獲取每個時鐘的當前值。
從 Linux 2.6.27 開始,可以在標志中對以下值進行廳局轎按位 OR 運算以更改 timerfd_create() 的行為:
在 2.6.26 及包括 2.6.26 的 Linux 版本中,標志必須指定為零。
int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
timerfd_settime()
arms (starts)
or
disarms (stops)
the timer referred to by the file descriptor fd.
new_value 參數(shù)指定計時器的初始到期時間和到期間隔(換句話說,計時器開始執(zhí)行后,將會在到達初始到期時間時報告一次,此后每過一個到期間隔就會報告一次)。 用于此參數(shù)的 itimerspec 結(jié)構(gòu)包含兩個字段,每個字段又是一個 timespec 類型的結(jié)構(gòu):
new_value.it_value 指定計時器的初始到期時間,以秒和納秒為單位。 將 new_value.it_value 的任一字段設(shè)置為非零值,即可啟動計時器。 將 new_value.it_value 的兩個字段都設(shè)置為零會解除定時器。
將 new_value.it_interval 的一個或兩個字段設(shè)置為非零值指定初始到期后重復(fù)計時器到期的時間段(以秒和納秒為單位)。 如果 new_value.it_interval 的兩個字段都為零,則計時器僅在 new_value.it_value 指定的時間到期一次。
如果將 new_value 設(shè)置為(10S,2S),即表示,計時器啟動后,將會在扮肆10S后報告一次,然后每隔2S報告一次;
如果將 new_value 設(shè)置為(10S,0S),即表示,計時器啟動后,將會在10S后報告一次,然后就不再報告了;
如果將 new_value 修改為(0S,0S),即表示,停止計時。臘枝
默認情況下, new_value 中指定的初始到期時間是相對于調(diào)用時計時器時鐘上的當前時間的(即,new_value.it_value 是相對于 clockid 指定的時鐘的當前值設(shè)置的)。 可以通過 flags 參數(shù)指定使用絕對時間。
flags 參數(shù)是一個位掩碼,可以包含以下值:
如果 old_value 參數(shù)不為 NULL,則它指向的 itimerspec 結(jié)構(gòu)用于返回調(diào)用時當前計時器的設(shè)置; 請參閱下面的 timerfd_gettime() 說明。
int timerfd_gettime(int fd, struct itimerspec *curr_value);
timerfd_gettime() 在 curr_value 中返回一個 itimerspec 結(jié)構(gòu),該結(jié)構(gòu)包含文件描述符 fd 所引用的計時器的當前設(shè)置。
it_value 字段返回計時器下一次到期之前的時間量。 如果此結(jié)構(gòu)的兩個字段都為零,則定時器當前已解除。 無論在設(shè)置計時器時是否指定了 TFD_TIMER_ABSTIME 標志,該字段始終包含一個相對值。
it_interval 字段返回定時器的間隔。 如果此結(jié)構(gòu)的兩個字段都為零,則計時器設(shè)置為僅在 curr_value.it_value 指定的時間到期一次。
timerfd_create() 返回的文件描述符支持以下附加操作:
在 fork(2) 之后,子進程繼承了 timerfd_create() 創(chuàng)建的文件描述符的副本。 文件描述符引用與父級中相應(yīng)文件描述符相同的底層計時器對象,子級中的 read(2) 將返回有關(guān)計時器到期的信息。
A file descriptor created by timerfd_create() is
preserved
across execve(2), and continues to generate timer expirations if the timer was armed.
成功時, timerfd_create() 返回一個新的文件描述符。 出錯時,返回 -1 并設(shè)置 errno 以指示錯誤。
timerfd_settime() 和 timerfd_gettime() 成功返回 0; 出錯時返回 -1,并設(shè)置 errno 以指示錯誤。
timerfd_create() can fail with the following errors:
timerfd_settime() and timerfd_gettime() can fail with the following errors:
timerfd_settime() can also fail with the following errors:
These system calls are available on Linux since kernel 2.6.25.
Library support is provided by glibc since version 2.8.
These system calls are Linux-specific.
假設(shè)在使用 timerfd_create() 創(chuàng)建的 CLOCK_REALTIME 或 CLOCK_REALTIME_ALARM 計時器時,發(fā)生以下場景:
在這種情況下,會發(fā)生以下情況:
目前,timerfd_create() 支持的時鐘 ID 類型少于 timer_create(2)。
以下程序創(chuàng)建一個
基于實時時鐘的絕對時間
的計時器,然后監(jiān)控其進度。 該程序最多接受三個命令行參數(shù)。 之一個參數(shù)指定計時器初始到期的秒數(shù)。 第二個參數(shù)指定計時器的間隔,以秒為單位。 第三個參數(shù)指定程序在終止前應(yīng)允許計時器到期的次數(shù)。 第二個和第三個命令行參數(shù)是可選的。
以下 shell 會話演示了該程序的使用:
linux set time的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux set time,如何在 Linux 上設(shè)置時間,Linux下一般用什么實現(xiàn)某個等待事件,如何讓linux 2.6.18-274版本 支持timerfd,linux手冊翻譯——timerfd_create()的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設(shè)、網(wǎng)站維護、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
文章名稱:如何在Linux上設(shè)置時間(linuxsettime)
瀏覽路徑:http://m.fisionsoft.com.cn/article/djpdspd.html


咨詢
建站咨詢
