3 3 Linux獲取系統資訊 5 6 7節

2021-08-02 14:13:47 字數 2659 閱讀 3939

(1)隨機數是隨機出現,沒有任何規律的一組數列。

(2)真正的完全隨機的數列是不存在的,只是一種理想情況。我們平時要用到隨機數時一般只能通過一些演算法得到乙個偽隨機數序列。

(3)我們平時說到隨機數,基本都指的是偽隨機數。

(1)連續多次呼叫rand函式可以返回乙個偽隨機數序列

(2)srand函式用來設定rand獲取的偽隨機序列的種子

(1)單純使用rand重複呼叫n次,就會得到乙個0-rand_max之間的偽隨機數,如果需要調整範圍,可以得到隨機數序列後再進行計算。

(2)單純使用rand來得到偽隨機數序列有缺陷,每次執行程式得到的偽隨機序列是同乙個序列,沒法得到其他序列

(3)原因是因為rand內部的演算法其實是通過乙個種子(seed,其實就是乙個原始引數,int型別),rand內部預設是使用1作為seed的,種子一定的演算法也是一定的,那麼每次得到的偽隨機序列肯定是同乙個。

(4)所以要想每次執行這個程式獲取的偽隨機序列不同,則每次都要給不同的種子。用srand函式來設定種子。

#include #include int main(int argc, char **argv)

*/ printf("rand_max = %d.\n", rand_max); // 2147483647

//srand(atoi(argv[1]));

srand(time(null));

for (i=0; i<6; i++)

printf("\n");

return 0;

}

(1)在每次執行程式時,先用srand設定乙個不同的種子,然後再多次呼叫rand獲取乙個偽隨機序列,這樣就可以每次都得到乙個不同的偽隨機序列。

(2)一般常規做法是用time函式的返回值來做srand的引數。

(1)linux系統收集系統中的一些隨機發生的事件的時間(譬如有人動滑鼠,譬如觸控螢幕的操作和座標等)作為隨機種子去生成隨機數序列。

(1)簡單程式單步除錯

(2)複雜程式printf列印資訊除錯

(3)框架體系日誌記錄資訊除錯

(4)核心除錯的困境

(1)linux核心是乙個非常龐大、非常複雜的乙個單獨的程式,對於這樣的乙個程式來說除錯是非常複雜的。

(2)項kernel這樣龐大的專案,給裡面新增/更改乙個功能是非常麻煩的,因為你這新增的乙個功能可能會影響其他已經有的。

(3)早期核心版本中儘管除錯很麻煩,但是高手們還可以憑藉個人超凡脫俗的能力去駕馭。但是到了2.4左右的版本的時候,這個難度已經非常大了。

(4)為了降低核心除錯和學習的難度,核心開發者們在核心中新增了一些屬性專門用於除錯核心,proc檔案系統就是乙個嘗試。

(5)proc檔案系統的思路是:在核心中構建乙個虛擬檔案系統/proc,核心執行時將核心中一些關鍵的資料結構以檔案的方式呈現在/proc目錄中的一些特定檔案中,這樣相當於將不可見的核心中的資料結構以視覺化的方式呈現給核心的開發者。

(6)proc檔案系統給了開發者一種除錯核心的方法:我們通過實時的觀察/proc/***檔案,來**核心中特定資料結構的值。在我們新增乙個新功能的前後來對比,就可以知道這個新功能產生的影響對還是不對。

(7)proc目錄下的檔案大小都是0,因為這些檔案本身並不存在於硬碟中,他也不是乙個真實檔案,他只是乙個介面,當我們去讀取這個檔案時,其實核心並不是去硬碟上找這個檔案,而是對映為核心內部乙個資料結構被讀取並且格式化成字串返回給我們。所以儘管我們看到的還是乙個檔案內容字串,和普通檔案一樣的;但是實際上我們知道這個內容是實時的從核心中資料結構來的,而不是硬碟中來的。

(1)/proc/cmdline

(2)/proc/cpuinfo

(3)/proc/devices

(4)/proc/interrupts

(1)sys檔案系統本質上和proc檔案系統是一樣的,都是虛擬檔案系統,都在根目錄下有個目錄(乙個是/proc目錄,另乙個是/sys目錄),因此都不是硬碟中的檔案,都是核心中的資料結構的視覺化介面。

(2)不同的是/proc中的檔案只能讀,但是/sys中的檔案可以讀寫。讀/sys中的檔案就是獲取核心中資料結構的值,而寫入/sys中的檔案就是設定核心中的資料結構的元素的值。

(3)歷史上剛開始先有/proc檔案系統,人們希望通過這種技術來除錯核心。實際做出來後確實很有用,所以很多核心開發者都去核心調價**向/proc目錄中寫檔案,而且剛開始的時候核心管理者對proc目錄的使用也沒有什麼經驗也沒什麼統一規劃,後來的結果就是proc裡面的東西又多又雜亂。

(4)後來覺得proc中的內容太多太亂缺乏統一規劃,於是乎又新增了sys目錄。sys檔案系統一開始就做了很好的規劃和約定,所以後來使用sys目錄時有了規矩。

#include #include #include #include int main(int argc, char **argv);	

if (argc != 2)

if (!strcmp(argv[1], "-v"))

read(fd, buf, sizeof(buf));

printf("結果是:%s.\n", buf);

} else if (!strcmp(argv[1], "-d"))

read(fd, buf, sizeof(buf));

printf("結果是:%s.\n", buf); }

return 0;

}

3 3Linux核心的組成

總算有點感覺了,上一小章講的完全不知道什麼鬼啊 這一小章講的是linux核心源 的目錄結構 linux核心的組成部分 1 程序排程 睡眠分為可中斷睡眠和不可中斷睡眠 linux核心中,使用task struct結構體來描述程序。該結構體中包含描述該程序記憶體資源 檔案系統資源 檔案資源 tty資源 ...

網路安全筆記 33 Linux的Nginx安裝

安裝編譯工具和開發環境包 yum y install pcre devel zlib devel 建立執行使用者和組 useradd m s sbin nologin nginx 不需要家目錄,不登入系統 編譯安裝 解壓縮安裝 tar zxf nginx 1.6.2.tar.gz cd nginx ...

Linux下獲取系統資訊

相關函式 include int gethostname char name,size t name include int uname struct utsname name 相關結構 struct utsname 例子int main void printf host name s n comp...