UNIX系統管理:系統調用-time系統調用

來源:互聯網
上載者:User
關鍵字 UNIX系統管理 time系統調用

在電腦的硬體中包含一個系統時鐘,系統引導的時候讀取該時鐘,然後維持它自己的時鐘計數器,利用時鐘計數器對系統內的事件,如檔的創建或使用者登錄等給出時間記錄。 時鐘值也可以利用time()系統調用供你自己的程式使用:

#include <sys/types/h>

#include (time.h>

time_t time(time_t *loc);

這個系統調用返回一個time_t值,如果參數loc是指向這種類型的變數的指標,則傳回值也被拷貝到這個指標所指的變數中。

資料類型time_t實際上由typedef定義,可以通過<time.h>訪問,它的基本HTTP://www.aliyun.com/zixun/aggregation/18278.html"> 資料類型是long。 因此time()系統調用返回一個長型整數作為當前時鐘的時間值,但是,這是一種奇怪格式,即從格林威治時間1970年1月1日午夜起所經過的秒數(我假定這個時鐘必定在某一時刻開始...)。

有一個枝節問題是:它用一個長型整數可以記錄多長時間? 如果限制在32位長的正整數範圍內(負值對時間沒有任何意義! ),則它剛好超過68年,或者說直到2038年初(還有充裕的時間想一個替代辦法)。

這種時間格式實際上相當有用,如果你想要解決兩個事件之間(例如你的登錄時間和退出系統的時間)經過了多長時間,你只要從較早時間減去較晚時間就得到兩個事件之間的秒數。

但是,在你想要顯示日,月年或者當天的時間的情況下,這種時間格式就不太方便。 為了簡化這些操作,標準庫中包含一些有用的函數為你進行轉換。 兩個這樣的函數是:

#include <time.h>

struct tm *gmtime(time_t *loc);

struct tm *localtime(time_t *loc);

這兩個函數都取一個參數loc,它是指向包含‘自1970年以來的秒數’值的變數的指標。 這裡兩個函數都返回指向一個結構的指標,該結構的域包含有要求的資訊:

struct tm {

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_lsdst;

}

域tm_hour,tm_min,和tm_sec以24小時的時鐘格式給出時鐘時間,tm_mday是在1到31範圍內的該月的日子,tm_mon是範圍為0-11月數,一月(January)作為0,tm_ year是自1900以來的年數,tm_wday是範圍為0到6的一周的日子,星期天(Sunday)為0,tm_yday是範圍為0到365該年的日子,一月一日(1 January)作為0,tm_ isdst是一個標誌規定夏時制是否有效(如果該資訊可供使用)。

這兩個函數的主要差別是gmtime()給出的它的相對於格林威治時間(GMT)的時間資訊,而localtime()給出的它的相對你的本地時區的時間資訊(在系統安裝和配置期間設置本地時區)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.