十四Linux編程環境

來源:互聯網
上載者:User
 
Linux編程環境時間日期類型timeval 及其相關API

“時間”和“日期”的概念,主要有以下幾個:

Coordinated Universal Time(UTC):國際標準時間,又稱為世界標準時間,也就是大家所熟知的格林威治標準時間(Greenwich Mean Time,GMT)。比如,中國內地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。

Calendar Time:日曆時間,是用“從一個標準時間點到此時的時間經過的秒數”來表示的時間。這個標準時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標準時間點是不變的,該編譯系統中的時間對應的日曆時間都通過該標準時間點來衡量,所以可以說日曆時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標準時間點來說,日曆時間都是一樣的。

epoch:時間點。時間點在標準C/C++中是一個整數,它用此時的時間和標準時間點相差的秒數(即日曆時間)來表示。

clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),一個clock tick不是CPU的一個刻度,而是C/C++的一個基本計時單位。

我們可以使用ANSI標準庫中的time.h標頭檔。這個標頭檔中定義的時間和日期所使用的方法,無論是在結構定義,還是命名,都具有明顯的C語言風格。下面,我將說明在C/C++中怎樣使用日期的時間功能。

struct timeval

{

time_t tv_sec; //秒

susenconds_t tv_usec; //微秒 10 e-6 秒

}

基準計算時間為1970年一月一日 UTC(世界標準時間) 0點(Epoch)

用time_t表示的時間(日曆時間)是從一個時間點(例如:1970年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是一個長整型數:

#ifndef _TIME_T_DEFINED
typedef long time_t; /* 時間值 */
#define _TIME_T_DEFINED /* 避免重複定義 time_t */
#endif

大家可能會產生疑問:既然time_t實際上是長整型,到未來的某一天,從一個時間點(一般是1970年1月1日0時0分0秒)到那時的秒數(即日曆時間)超出了長整形所能表示的數的範圍怎麼辦?對time_t資料類型的值來說,它所表示的時間不能晚於2038年1月18日19時14分07秒。為了能夠表示更久遠的時間,一些編譯器廠商引入了64位甚至更長的整形數來儲存日曆時間。比如微軟在Visual C++中採用了__time64_t資料類型來儲存日曆時間,並通過_time64()函數來獲得日曆時間(而不是通過使用32位字的time()函數),這樣就可以通過該資料類型儲存3001年1月1日0時0分0秒(不包括該時間點)之前的時間。

下面的代碼示範了如何擷取當前系統時間並轉換成字串:

timeval tv;

gettimeofday(&tv,NULL);

std::cout<<ctime(&tv.tv_sec)<<endl;//將秒數轉換成目前時間的字串表示

tm及其相關API

time(取得目前的時間)

表標頭檔 #include<time.h>

定義函數 time_t time(time_t *t);

函數說明 此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t 並非null 指標的話,此函數也會將傳回值存到t指標所指的記憶體。

傳回值 成功則返回秒數,失敗則返回((time_t)-1)值,錯誤原因存於errno中。

結構tm的定義為

struct tm

{

int tm_sec;//代表目前秒數,正常範圍為0-59,但允許至61秒

int tm_min;//代表目前分數,範圍0-59

int tm_hour;// 從午夜算起的時數,範圍為0-23

int tm_mday;// 目前月份的日數,範圍01-31

int tm_mon;// 代表目前月份,從一月算起,範圍從0-11

int tm_year;// 從1900 年算起至今的年數

int tm_wday;// 一星期的日數,從星期一算起,範圍為0-6

int tm_yday;// 從今年1月1日算起至今的天數,範圍為0-365

int tm_isdst;// 日光節約時間的旗標

};

樣本如下:

time_t sec = time( 0 );//擷取當前秒數(UTC)時間

struct tm tmbuf;

localtime_r( &sec, &tmbuf);//將秒數轉換成當地時區時間

GCC編譯命令

gcc -v 查看版本

尋找g++的命令協助 鍵入 info g++,會顯示出gcc的協助資訊,g++大部分參數和gcc命令相同

選項 解釋

-ansi 只支援 ANSI 標準的 C 文法。這一選項將禁止 GNU C 的某些特色,

例如 asm 或 typeof 關鍵詞。

-c -o只編譯並產生目標檔案。

-DMACRO 以字串“1”定義 MACRO 宏。

-DMACRO=DEFN 以字串“DEFN”定義 MACRO 宏。

-E 只運行 C 先行編譯器。

-g 產生調試資訊。GNU 調試器可利用該資訊。

-IDIRECTORY 指定額外的標頭檔搜尋路徑DIRECTORY。

-LDIRECTORY 指定額外的函數庫搜尋路徑DIRECTORY。

-lLIBRARY 串連時搜尋指定的函數庫LIBRARY。

-m486 針對 486 進行代碼最佳化。

-o FILE 產生指定的輸出檔案。用在產生可執行檔時。

-O0 不進行最佳化處理。

-O 或 -O1 最佳化產生代碼。

-O2 進一步最佳化。

-O3 比 -O2 更進一步最佳化,包括 inline 函數。

-shared 產生共用目標檔案。通常用在建立共用庫時。

-static 禁止使用共用串連。

-UMACRO 取消對 MACRO 宏的定義。

-w 不產生任何警告資訊。

-Wall 產生所有警告資訊。

g++ -o 目標檔案名 源檔案名稱

ldd programm 查看programm程式所依賴的共用庫(.so)檔案

ar crv mm.a x.o y.o 將x.o和y.o合并到一個靜態庫mm.a檔案中

ranlib mm.a 產生靜態庫的內容表 (不是必須)

emacs基本命令

ctrl+x+f 開啟檔案

ctrl+x+d 開啟目錄,查看該目錄的子目錄

ctrl+x+s 儲存當前buffer裡的檔案

ctrl+s 尋找當前buffer裡的文本

rename-buffer 修改當前緩衝區的名字

ctrl+shift+ - 回退

ctrl+alt+/ 對選中的代碼進行格式化

ctrl+x 鬆開後 按o 在不同的緩衝區移動焦點

alt+x選中命令緩衝區

ctrl+g取消當前命令

alt+w 複製被選中的代碼

ctrl+y 粘帖代碼

ctrl+w 剪下代碼

ctrl+x 鬆掉後按backspace 設定斷點

ctrl+x+k 關閉當前緩衝區

GDB調試命令

查看gdb協助資訊 gdb –help

注意g++編譯時間,使用-g命令

gdb 已編譯的程式檔案名稱

list 顯示原始碼

break命令設定斷點,可以後面加上函數名稱

delete breakpoints 刪除所有斷點

run 運行程式

step <count> 單步跟蹤(自動進入函數)

next <count> 單步跟蹤(不自動進入函數)

continue 繼續運行

print 變數名查看某變數的值,調試過程中改變某變數的值

info breakpoints 查看程式中斷點設定的資訊

quit 退出

info thread 列出多個線程號。 thread 查看當前線程號 thread 線程號 選擇進入哪個線程進行調試。

Unicode和MultiBytes 字串的轉換

#include <wchar.h>

size_t wcsrtombs (char *dest, const wchar_t **src, size_t len, mbstate_t *ps);

#include <stdlib.h>

size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);

環境變數

查看環境變數

env

env也可以用來設定環境變數的值,具體看env --help

set 也可是設定環境變數

如果環境變數在一個terminal裡設定,就只對這個terminal有效

如果想全域的設定,需要修改

/etc/profile檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.