Linux下關於時間概念的C語言程式設計

2021-06-16 12:21:52 字數 2955 閱讀 4463

abstract

在程式中,經常需要輸出系統的當前時間、計算程式的執行時間、使用計時器等。

introduction

一、時間的型別

1.格林威治標準時間

coordinated universal time(utc)是世界標準時間,即常說的格林威治標準時間(greenwich mean time,gmt).

2.日曆時間

日曆時間(calendar time)是用"乙個標準時間點(如2023年1月1日0點)到此時經過的秒數"來表示的時間.

二、時間函式的api

時間函式的api均屬於系統呼叫函式.。

1.獲取日曆時間

#include

time_t time(time_t *tloc)

函式功能:獲取日曆時間,即從2023年1月1日0點到現在所經歷的秒數.

引數:通常設定為null

(time_t在time.h中定義:typedef long int time_t)

例:#include

void main()

執行結果:

[root@localhost time]# ./time

seconds=1294908511

通常使用者得到日曆時間的秒數沒有實際的意義,但可以為時間轉化做一些鋪墊性質的工作.為了更好的利用時間,用

戶需要將這些秒數轉化為更容易接受的時間表示方式,這些表示時間的方式有格林威治時間、本地時間等.

2.將日曆時間轉換為格林威治標準時間

struct tm *gmtime(const time_t *timep)

函式功能:將日曆時間轉化為格林威治標準時間,並儲存在tm結構

引數:日曆時間的返回值

3.將日曆時間轉化為本地時間

struct tm* localtime(const time_t *timep)

函式功能:將日曆時間轉化為本地時間,並儲存至tm結構

引數:日曆時間的返回值

由上面兩個函式可以看出,這兩個函式的返回值均存放在tm結構中,具體的tm結構如下:

struct tm

建立time1.c

#include

#include

int main(void)

執行結果:

[root@localhost time]# gcc time1.c -o time1

[root@localhost time]# ./time1

local hour is: 0

utc hour is: 8

[root@localhost time]# date

thu jan 13 00:52:44 pst 2011

利用函式gmtime()、localtime()可以將日曆時間轉化為格林威治時間和本地時間,雖然使用者可通過結構體tm來獲取

這些時間值,但看起來還不方便,最好是將所有的資訊,如年、月、日、星期、時、分、秒以字串的形式顯示出來,

這樣就加直觀.

4.時間顯示

char *asctime(const struct tm *tm)

函式功能:將tm格式的時間轉化為字串

引數:日曆時間的返回值

例如: sat jul 30 08:43:03 2005

該函式較ctime()使用起來更加的複雜.必須按照下面3個步驟來進行.

<1>使用函式time()來獲取日曆時間

<2>使用函式gmtime()將日曆時間轉化為格林威治標準時間

<3>使用函式asctime()將tm格式的時間轉化為字串

例程:#include

#include

int main(void)

char *ctime(const time_t *timep)

函式功能:將日曆時間轉化為本地時間的字串形式

引數:日曆時間的返回值

該函式較asctime()使用起來更加簡單.必須按照下面2個步驟來進行.

<1>使用函式time()來獲取日曆時間

<2>使用函式ctime()將日曆時間直接轉化為字串

5.獲取從今日凌晨到現在的時間差

int gettimeofday(struct timeval *tv,struct timezone *tz)

函式功能:獲取從今日凌晨(0:0:0)到現在的時間差,常用於計算事件耗時

引數1:存放從今日凌晨(0:0:0)到現在的時間差,時間差以秒或微秒為單位,以結構體形式存放

struct timeval

引數2:常設定為null

函式用法:可以在做某件事情之前呼叫gettimeofday(),在做完該件事情之後呼叫gettimeofday(),兩個函式的引數1

的差就是做該事情所消耗的時間.

例程:計算函式function()的耗時

time.c

#include

#include

#include

#include

void function()   /* 演算法分析 */

void main()

執行結果:

[root@localhost lishuai]# gcc time.c -o time -wall

[root@localhost lishuai]# ./time

use time:0.006288

6.延時函式

<1>使程式睡眠seconds秒

unsigned int sleep(unsigned int seconds)

函式功能:使程式睡眠seconds秒

引數:需要休眠的秒數

<2>使程式睡眠usec微秒

void usleep(unsigned long usec)

函式功能:使程式睡眠usec微秒

引數:需要休眠的秒數

Linux下關於時間的函式

標頭檔案 includestruct timeval 其中tv sec是由凌晨開始算起的秒數,tv usec則是微秒 10e 6 second struct timezone tv minuteswest是格林威治時間往西方的時差,tv dsttime則是時間的修正方式。struct timespe...

Linux下關於snmp的snmpwalk命令

最後,普及下snmpwalk命令 可使用snmpwalk檢視支援snmp協議的裝置的一些資訊,如cisco交換機或路由器ip位址等,也可用來協助開發snmp功能。用法 snmpwalk v 1或2 代表snmp版本 c snmp讀密碼 ip位址 oid 物件標示符 1 v 指定snmp的版本,1或者...

linux下關於檔案許可權的控制

1.為什麼需要檔案許可權的存在?給檔案加上許可權,可有效對檔案進行保護,防止對檔案的惡意篡改。2.檢視檔案許可權的命令 方式一 ls l 檔名 方式二 ls ld 檔案路徑 3.關於許可權的理解 1 檔案 rw r r 1 root root 0 aug 15 04 58 day03 各引數解釋如下...