<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

    Chapter 1. UNIX System Overview

     

    UNIX 結(jié)構(gòu):

    操作系統(tǒng)是控制硬件資源和提供程序運(yùn)行環(huán)境的一種軟件。

    系統(tǒng)調(diào)用是訪問(wèn)內(nèi)核的接口。

    Shell是特殊的應(yīng)用程序,提供運(yùn)行其他程序的接口。

     

    登入:

    用戶名,/etc/passwd, shell

     

    文件和目錄:

    文件系統(tǒng),文件名,路徑名,工作目錄,Home目錄

     

    輸入和輸出:

    文件描述符,標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤,unbuffered I/O,標(biāo)準(zhǔn)I/O

     

    程序和進(jìn)程:

    程序是磁盤上的可執(zhí)行文件,讀入到內(nèi)存中并由內(nèi)核執(zhí)行。

    進(jìn)程,進(jìn)程ID,進(jìn)程控制(fork, exec, waitpid),線程和線程idid只在本進(jìn)程內(nèi)有效)

     

    錯(cuò)誤處理:

    當(dāng)函數(shù)執(zhí)行錯(cuò)誤發(fā)生時(shí),將返回一個(gè)負(fù)值,并設(shè)置errno為一個(gè)整數(shù)以提供額外的信息。strerrorperror打印錯(cuò)誤信息。

    錯(cuò)誤定義可以分為兩類:致命和非致命的錯(cuò)誤。非致命錯(cuò)誤一般是暫時(shí)的,可以恢復(fù),如缺少資源,就可以延遲一段時(shí)間再重試。

     

    用戶身份:

    用戶id,組id,補(bǔ)充組id(一個(gè)用戶可以屬于多個(gè)組中)

     

    信號(hào):

    用來(lái)通知進(jìn)程有情況發(fā)生的一種技術(shù)。進(jìn)程收到信號(hào)后有三種選擇1,忽略 2,默認(rèn)處理方法 3,自己提供一個(gè)函數(shù)當(dāng)信號(hào)發(fā)生時(shí)調(diào)用。

     

    時(shí)間值:

    有兩種:1,日歷時(shí)間time_t 2,進(jìn)程時(shí)間clock_t( clock time, user cpu time, system cpu time)

    日歷時(shí)間可用來(lái)記錄文件最后修改的時(shí)間等。

    Clock time是此進(jìn)程開(kāi)始執(zhí)行到終止的時(shí)間,包括了進(jìn)程的切換,以及其他進(jìn)程運(yùn)行的時(shí)間片。

     

    系統(tǒng)調(diào)用和庫(kù):

    系統(tǒng)調(diào)用是在內(nèi)核空間中運(yùn)行。庫(kù)封裝了系統(tǒng)調(diào)用,運(yùn)行在用戶空間。

     

    Chapter 2. UNIX Standardization and Implementation

     

    UNIX標(biāo)準(zhǔn)化:

    ISO C IEEE POSIXSingle UNIX Specification(POSIX的超集)

     

    UNIX系統(tǒng)的實(shí)現(xiàn):

    System V AT&T

    BSD  (Berkeley)

    Linux

    Mac OScore is Darwin combination of Mach kernel and FreeBSD

    Solaris (Sun, based on System V)

     

    限制:

    由于不同系統(tǒng)的實(shí)現(xiàn)定義了很多magic numbers和常量。為了增強(qiáng)可移植性,需要兩類的限制1,編譯時(shí)的限制2,運(yùn)行時(shí)的限制。處理方法分為三種:1,編譯時(shí)的限制(headers

    2,運(yùn)行時(shí)和文件、目錄無(wú)關(guān)的限制(sysconf函數(shù))3,運(yùn)行時(shí)和文件、目錄相關(guān)的限制(pathconffpathconf函數(shù))

     

    選項(xiàng):

    同樣為了不同系統(tǒng)的代碼可移植性.

    1.     Compile-time options are defined in <unistd.h>.

    2.     Runtime options that are not associated with a file or a directory are identified with the sysconf function.

    3.     Runtime options that are associated with a file or a directory are discovered by calling either the pathconf or the fpathconf function.

     

    特性測(cè)試宏:

    測(cè)試系統(tǒng)是否支持某種特性的宏定義,如__STDC__

     

    原語(yǔ)系統(tǒng)數(shù)據(jù)類型:

    <sys/types.h>中定義的數(shù)據(jù)類型。如time_t, off_t, pid_t等。

     

    標(biāo)準(zhǔn)間的沖突:

    為了兼容性,很多POSIX的系統(tǒng)實(shí)現(xiàn)了ISO C的函數(shù)。

     

    Chapter 3. File I/O

     

    文件描述符:

    打開(kāi)文件、創(chuàng)建文件時(shí)返回的值,用來(lái)讀、寫、定位文件的標(biāo)識(shí)。

     

    open,creat,close函數(shù):

    好像沒(méi)什么好說(shuō)的。要注意open時(shí)一些特殊的文件狀態(tài)標(biāo)記,如O_SYNCO_NOCTTY等。

    lseek函數(shù):

    定位文件,可以產(chǎn)生空洞文件。定位可以從頭,從尾,從當(dāng)前位置開(kāi)始。

     

    Readwrite函數(shù):

    沒(méi)啥好說(shuō)的。I/O效率根據(jù)自己設(shè)定的buffer大小而不同。因此,調(diào)用readwrite的次數(shù)不同,耗去的系統(tǒng)cpu時(shí)間不同。測(cè)試時(shí),第一次和之后的測(cè)試效率是不同的,因?yàn)?/span>cache的存在。

     

    文件共享:

    文件共享是指不同進(jìn)程間打開(kāi)文件的共享。內(nèi)核通過(guò)三種數(shù)據(jù)結(jié)構(gòu)來(lái)表示打開(kāi)的文件,1,每個(gè)進(jìn)程有個(gè)進(jìn)程表項(xiàng),表中是打開(kāi)文件的描述符向量。每個(gè)向量包含了文件描述符標(biāo)記和一個(gè)指向文件表項(xiàng)的指針;2,內(nèi)核為所有打開(kāi)的文件維護(hù)一個(gè)文件表,每個(gè)文件表項(xiàng)包括了a,文件狀態(tài)標(biāo)記,如讀、寫、添加、非阻塞等b,當(dāng)前的文件偏移量c,指向文件v-node表項(xiàng)的指針;3,每個(gè)打開(kāi)文件或設(shè)備都有一個(gè)v-node結(jié)構(gòu)   ,包含文件類型和指向操作文件的函數(shù)的指針。

    當(dāng)兩個(gè)以上獨(dú)立進(jìn)程打開(kāi)同一個(gè)文件實(shí)現(xiàn)文件共享時(shí),內(nèi)核維護(hù)不同的文件表項(xiàng),就是兩個(gè)以上進(jìn)程表項(xiàng)中的文件表項(xiàng)指針指向不同的文件表項(xiàng),而不同的文件表項(xiàng)中的v-node指針指向同一個(gè)v-node而實(shí)現(xiàn)文件共享。由于每個(gè)進(jìn)程有自己的打開(kāi)文件表項(xiàng),所以有自己的文件打開(kāi)狀態(tài)以及文件偏移量。

     

    原子操作:

    為了解決多個(gè)進(jìn)程間共享文件時(shí)讀寫不一致的問(wèn)題。如多個(gè)進(jìn)程對(duì)同一個(gè)文件添加內(nèi)容,如多個(gè)進(jìn)程創(chuàng)建同一個(gè)文件,如lseek后的write,當(dāng)多個(gè)進(jìn)程同時(shí)執(zhí)行時(shí)就會(huì)使文件寫的內(nèi)容不是預(yù)期的。

    函數(shù)preadpwrite是把lseekread/write作為原子操作來(lái)實(shí)現(xiàn),避免上述問(wèn)題。

     

    Dupdup2函數(shù):

    復(fù)制描述符,dup是將文件描述符復(fù)制到最小可用的描述符,讓最小可用的描述符指向原描述符所指向的文件表項(xiàng)。

    dup2是將指定的文件描述符指向原描述符所指向的文件表項(xiàng)。如果指定的描述符已打開(kāi)則先關(guān)閉。

     

    Syncfsyncfdatasync函數(shù):

    延遲寫是將排隊(duì)在bufferpage cache中的數(shù)據(jù)過(guò)一些時(shí)間再寫到磁盤中。當(dāng)再次用到這些cache時(shí)再寫到磁盤中。

    提供這些函數(shù)是將數(shù)據(jù)立即寫到磁盤中,保持文件系統(tǒng)的一致性。Syncfsync的區(qū)別是,前者不等待數(shù)據(jù)寫到磁盤完成即返回,而后者等待完成后才返回。前者是寫入cache中的所有數(shù)據(jù),系統(tǒng)中的updatedaemon進(jìn)程,它調(diào)用sync,并30s中刷新一次。而后者是指定單個(gè)文件刷新數(shù)據(jù),多用于數(shù)據(jù)庫(kù)的更新。Fdatasyncfsync類似,但是它只刷新數(shù)據(jù)部分,而不更新文件的屬性。

     

    fcntl函數(shù):

    作用是能夠改變打開(kāi)文件的屬性。根據(jù)參數(shù)不同主要有五種用途:

    1, 復(fù)制已存在的描述符

    2, 獲得和設(shè)置文件描述符標(biāo)記

    3, 獲得和設(shè)置文件狀態(tài)標(biāo)記

    4, 獲得和設(shè)置異步I/O的所屬者

    5, 獲得和設(shè)置記錄鎖

    注意的是:我們?cè)谠O(shè)置文件描述標(biāo)記或文件狀態(tài)標(biāo)記時(shí),不能只是F_SETFD F_SETFLfcntl的調(diào)用,而是要先獲得值再設(shè)置值。

    文件狀態(tài)標(biāo)記O_SYNC,表示同步寫,每個(gè)write要等待數(shù)據(jù)寫到磁盤上才返回。而在通常情況下write只是將要寫的數(shù)據(jù)排隊(duì),某個(gè)時(shí)刻后才寫到磁盤上。

    還提到fcntl這樣的用處,fcntl可以設(shè)置shell打開(kāi)的標(biāo)準(zhǔn)輸出輸入的屬性,因?yàn)樗灰牢募枋龇湍茏龅轿募傩缘母淖儭?/span>

     

    Iocntl函數(shù):

    主要用于終端的I/O和提供本章中提到的函數(shù)無(wú)法實(shí)現(xiàn)的功能。如對(duì)磁帶的讀寫和定位的操作。

     

    /dev/fd

    打開(kāi)/dev/fd/n文件就等于是對(duì)文件描述符dup(n),假定n是已打開(kāi)的描述符。

    open”/dev/fd/n”, mode == dup(n)

     

    Chapter 4. Files and Directories

     

    stat, fstat, lstat函數(shù):

    獲得磁盤上文件的結(jié)構(gòu)信息,由結(jié)構(gòu)stat描述。這些信息應(yīng)該是從文件系統(tǒng)中的inode結(jié)構(gòu)讀出的。包括:文件類型、訪問(wèn)權(quán)限、大小、所屬用戶id等等信息。

     

    文件類型:

    普通文件,目錄文件,符號(hào)鏈接,字符設(shè)備、塊設(shè)備、socketFIFO

     

    Set-User-IDSet-Group-ID

    每個(gè)進(jìn)程有六個(gè)和他相關(guān)聯(lián)的id,真實(shí)用戶id、有效用戶id、保存設(shè)置用戶id以及三個(gè)對(duì)應(yīng)的組id。注意的是這是與進(jìn)程相關(guān)的,以前總是弄混。

    真是用戶id是用戶登錄時(shí)使用的id

    一般,有效用戶id=真是用戶id。例外是在文件模式字st_mode中置位一個(gè)特殊標(biāo)記set-user-id,那么有效用戶id就是此進(jìn)程所執(zhí)行的文件所屬者的用戶id。有用的是,判斷一個(gè)文件是否可以被進(jìn)程訪問(wèn),是根據(jù)進(jìn)程的有效用戶id是否等于文件所屬的用戶id來(lái)的。舉例:普通用戶用程序passwd來(lái)修改密碼時(shí),會(huì)訪問(wèn)到root用戶的文件/etc/passwd/etc/shadow。為什么能成功,是因?yàn)?/span>passwdset-user-id程序并且所屬是root,當(dāng)普通用戶執(zhí)行時(shí),它的有效用戶id就變成root,就可以訪問(wèn)上面兩個(gè)文件。

     

    新建文件和目錄的所屬者:

    新文件的用戶id是進(jìn)程的有效用戶id

    而新文件的組id有兩種說(shuō)法 1.進(jìn)程的有效組id2. 文件所在的目錄的組id。具體實(shí)現(xiàn),每個(gè)系統(tǒng)有所不同。

     

    access函數(shù):

    它的用處是檢測(cè)真實(shí)用戶id的訪問(wèn)文件的權(quán)限,而不管它是否是set-user-id程序。

     

    umask函數(shù):

    創(chuàng)建文件時(shí)的屏蔽位,設(shè)置創(chuàng)建的文件的訪問(wèn)權(quán)限。shell中也有umask命令。

     

    chmodfchmod函數(shù):

    改變已有文件的訪問(wèn)權(quán)限。

     

    Sticky bit

    作用是在可執(zhí)行程序在第一次執(zhí)行時(shí),程序的代碼段text將復(fù)制到swap空間中。在下次執(zhí)行時(shí),此程序load到內(nèi)存中就很快。如今的unix系統(tǒng),虛擬內(nèi)存以及快速文件系統(tǒng)的出現(xiàn),這項(xiàng)技術(shù)并不需要了。

     

    chown, fchown, and lchown Functions

    改變文件的所屬者。大多數(shù)系統(tǒng)中,只有root能改變文件的所屬者。Whether the owner can be changed depends on the different systems.

     

    文件大小:

    stat結(jié)構(gòu)中的st_size包含文件的字節(jié)大小。但是只對(duì)普通、目錄、符號(hào)鏈接文件有意義。

    對(duì)于普通文件,大小為0是允許的。第一次讀就得到end-of-file

    對(duì)于目錄文件,大小通常是16512的倍數(shù)。

    對(duì)于符號(hào)鏈接文件,大小是被鏈接的文件路徑名長(zhǎng)度。此外,它不包含C語(yǔ)言中字符串的終止空字符。

    stat結(jié)構(gòu)中的st_blksize為文件I/O時(shí)所使用的塊大小。

    stat結(jié)構(gòu)中的st_blocks為文件所占的實(shí)際磁盤塊數(shù)。

    文件中的洞,當(dāng)文件中有洞時(shí),通過(guò)ls –l core顯示時(shí),會(huì)包含洞所占的字節(jié)數(shù)。而用du –s

    core則顯示文件實(shí)際所占的磁盤塊數(shù)。當(dāng)用read讀文件中洞的內(nèi)容時(shí),得到的是0(不是‘0’而是‘\0’,字符串的結(jié)束符),打印時(shí)將什么都不會(huì)顯示。wc –c core可以統(tǒng)計(jì)文件中的字節(jié)數(shù)。 經(jīng)驗(yàn)證,在Linux中,雖然是空洞文件,但是空洞仍然占磁盤塊空間。

     

    文件截?cái)啵?/span>

    truncationftruncation函數(shù)。例外:當(dāng)截?cái)嗟拈L(zhǎng)度大于原有文件的長(zhǎng)度時(shí),效果依賴于具體的系統(tǒng)。符和XSI的系統(tǒng)文件變長(zhǎng),而變長(zhǎng)的部分read出內(nèi)容是0.

     

    文件系統(tǒng):

    磁盤可以有多個(gè)分區(qū),每個(gè)分區(qū)可以是不同的文件系統(tǒng)。文件系統(tǒng)主要包含部分:boot blocksuper blockcylinder group0n

    每個(gè)cylinder group中包含:super block copyi-node mapblock bitmap i-nodes(一個(gè)文件/目錄一個(gè)) data/directory blocks(存放文件/目錄的數(shù)據(jù))。

    對(duì)于普通文件,i-node指向了所屬文件的數(shù)據(jù)塊。而目錄文件,i-node則指向了所屬目錄的directory blocks

    每個(gè)directory block中的主要內(nèi)容是目錄項(xiàng)所包含的文件的i-node號(hào)以及文件名。當(dāng)目錄項(xiàng)包含這樣的信息時(shí),被包含的文件的i-nodestat的成員st_nlink即鏈接數(shù)就增1。這種鏈接就是硬鏈接,通過(guò)ln命令實(shí)現(xiàn),即創(chuàng)建一個(gè)新目錄項(xiàng)指向已有的文件。而只有當(dāng)鏈接數(shù)為0的時(shí)候,文件才被刪除。

    修改文件名如mv命令,是添加一個(gè)新目錄項(xiàng)指向已有文件,再unlink掉原目錄項(xiàng),而不需要移動(dòng)文件的實(shí)際內(nèi)容。

    葉目錄(目錄中不包含任何其他目錄)的鏈接數(shù)是2,分別是目錄中dot,以及父目錄對(duì)它的指向。在葉目錄增加一個(gè)子目錄,則葉目錄的鏈接數(shù)就增1,因?yàn)樾略鲎幽夸浀?/span>dotdot指向它。

     

    link,unlink,remove,rename函數(shù):

    通過(guò)link創(chuàng)建一個(gè)新的目錄項(xiàng)指向一個(gè)文件,并使鏈接數(shù)增1。這樣多個(gè)目錄項(xiàng)就可以指向同一個(gè)文件。大多數(shù)的系統(tǒng)不允許對(duì)目錄硬鏈接,因?yàn)闀?huì)產(chǎn)生文件系統(tǒng)中的loop

    unlink刪除目錄項(xiàng),鏈接數(shù)減1.參數(shù)是符號(hào)鏈接的話,將移除本身而不是所鏈接的文件。超級(jí)用戶能用unlink去刪除目錄,同rmdir

    remove對(duì)文件來(lái)說(shuō)相當(dāng)于unlink,對(duì)目錄來(lái)說(shuō)是rmdir

    rename的處理情況較多復(fù)雜些。暫時(shí)不去關(guān)注,用到再說(shuō)。

     

    符號(hào)鏈接:

    硬鏈接是直接指向文件的i-node,通過(guò)對(duì)i-node的鏈接增加計(jì)數(shù)來(lái)實(shí)現(xiàn)的。使用限制有兩點(diǎn)1,鏈接和文件必須在同一個(gè)文件系統(tǒng)中,因?yàn)橛叉溄邮桥ci-node號(hào)相關(guān)的,不同的文件系統(tǒng)中不同文件可能有相同的i-node號(hào)。2,只有超級(jí)用戶才能創(chuàng)建目錄的硬鏈接。

    符號(hào)鏈接則是間接指向一個(gè)文件,通過(guò)創(chuàng)建新的i-nodei-node指向data blockdata block內(nèi)容是文件的路徑名。符號(hào)鏈接通常是用來(lái)將一個(gè)文件或整個(gè)目錄層次移動(dòng)到系統(tǒng)的另一個(gè)位置。

    注意的是,當(dāng)用到文件名作參數(shù)的函數(shù)時(shí),函數(shù)是否follow符號(hào)鏈接。

     

    syslinkreadlink函數(shù):

    創(chuàng)建符號(hào)鏈接syslink

    open函數(shù)會(huì)follow符號(hào)鏈接,如果要打開(kāi)符號(hào)鏈接并讀其中的內(nèi)容,則要用readlink

     

    文件的時(shí)間:

    有三種,1,最后訪問(wèn)時(shí)間 2,最后修改時(shí)間 3,最后i-node狀態(tài)改變時(shí)間。

    utime函數(shù)可以修改12的時(shí)間,而3的時(shí)間調(diào)用utime時(shí)自動(dòng)更新。

     

    mkdirrmdir函數(shù)

    mkdir創(chuàng)建空的目錄,并自動(dòng)創(chuàng)建dotdotdot目錄項(xiàng)。注意創(chuàng)建時(shí)mode的權(quán)限除了讀寫外,還要有執(zhí)行,這不同于文件。新目錄的用戶id和組id需要討論。

    rmdir則是刪除空目錄。

     

    讀目錄:

    有訪問(wèn)權(quán)限就可讀目錄,而只有內(nèi)核才可以寫目錄。

     

    Chdir, fchdir,getcwd函數(shù)

    改變當(dāng)前的工作目錄chdirfchdir。當(dāng)前工作目錄是進(jìn)程的一個(gè)屬性。它并不影響調(diào)用進(jìn)程的當(dāng)前工作目錄。

    Getcwd得到當(dāng)前工作目錄。

     

     

    Chapter 5. Standard I/O Library

     

    Streams and FILE Objects:

    就是通過(guò)標(biāo)準(zhǔn)庫(kù)如fopen打開(kāi)的返回值指針FILE,使Stream關(guān)聯(lián)到打開(kāi)的文件。

    fwide函數(shù)的作用是改變Stream的模式,是wide-oriented還是byte-orientedWide是為了支持國(guó)際化字符集,寬字符。

     

    標(biāo)準(zhǔn)輸出、輸入、錯(cuò)誤:

    對(duì)應(yīng)文件描述符的有相應(yīng)的流, stdin, stdout, stderr。在stdio.h中有定義。

     

    Buffering:

    目的是為了最小化系統(tǒng)調(diào)用readwrite的次數(shù)。

    分為完全緩沖、行緩沖、無(wú)緩沖三種。

    完全緩沖:行緩沖的流如果沒(méi)有連接到終端設(shè)備上,則是完全緩沖。Stdinstdout如果被重定位到文件上,則是完全緩沖。

    行緩沖:stdinstdout

    無(wú)緩沖:stderr

     

    打開(kāi)流:

    Fopenfreopenfdopen

     

    讀寫流:

    一字節(jié)一次I/O: getc, fgetc, getchar. Putcfputc, putchar.其中,getcputc一般由宏來(lái)實(shí)現(xiàn)。

    一行一次I/Ogetsfgetsputsfputs,最好不要使用getsputs,不安全。造成緩沖區(qū)溢出。

    直接I/O(二進(jìn)制I/O)freadfwrite,結(jié)構(gòu)體的讀寫。以上的幾個(gè)讀寫函數(shù)均不適用,如遇到空字節(jié)在結(jié)構(gòu)體中時(shí),上面函數(shù)的讀寫就無(wú)法完成。存在問(wèn)題,當(dāng)編譯器或系統(tǒng)的不同,結(jié)構(gòu)體字節(jié)對(duì)齊會(huì)造成讀寫不正確;機(jī)器體系結(jié)構(gòu)的不同,二進(jìn)制格式對(duì)多字節(jié)的整數(shù)或浮點(diǎn)數(shù)的存儲(chǔ)也會(huì)不同。

     

    標(biāo)準(zhǔn)I/O的效率:

    驗(yàn)證的結(jié)果是,用戶不用去設(shè)定在系統(tǒng)調(diào)用readwrite時(shí)所用的緩沖區(qū)大小,在標(biāo)準(zhǔn)I/O中內(nèi)部已經(jīng)自動(dòng)設(shè)定了這樣最佳的buffer,使系統(tǒng)CPU的時(shí)間使用最少。而fgetsfputs中用戶設(shè)定的line buffer的大小只會(huì)影響用戶CPU的時(shí)間。因此,數(shù)據(jù)的copy有兩次:一次在內(nèi)核和標(biāo)準(zhǔn)I/O buffer之間(系統(tǒng)調(diào)用readwrite);另一次在標(biāo)準(zhǔn)I/O buffer和我們的行buffer之間。

     

    流的定位:

    ftellfseekrewind

    fgetposfsetpos(可移植的)

     

    格式化I/O

    用得最多的是printf,scanf, sprintf, snprintf, 具體的參數(shù)標(biāo)志細(xì)節(jié),用到時(shí)再查。

     

    臨時(shí)文件:

    由兩個(gè)函數(shù)生成,tmpnam, tmpfile. 目前作用貌似不大。

     

    Chapter 6. System Data Files and Information

     

    Password File:

    /etc/passwd文件中包含了各個(gè)用戶的如用戶名、密碼、用戶id、組id等信息。并通過(guò)passwd結(jié)構(gòu)來(lái)描述。

    通過(guò)如getpwuidgetpwnamgetpwent函數(shù)來(lái)獲得passwd結(jié)構(gòu)。

     

    Shadow Passwords

    出于安全考慮,用戶登錄密碼在/etc/shadow文件中加密。由spwd結(jié)構(gòu)描述。

    加密是one-way加密算法,意思是你不能通過(guò)加密后的密碼得出原密碼,而只能通過(guò)原密碼去驗(yàn)證是否正確。

    提供了相似的訪問(wèn)函數(shù)。但是shadow中的用戶加密密碼是不可讀出的。

     

    Group FileSupplementary Group ID:

    /etc/group文件描述組的信息,并由group結(jié)構(gòu)描述,包括組名、加密密碼、組id、所屬組

    的用戶名數(shù)組。

     

    Other Data Files:

    /etc/services; /etc/protoclos; /etc/networks;

     

    Login Accounting:

    有兩個(gè)相關(guān)的文件:utmp,記錄當(dāng)前所有登錄的用戶。wtmp,記錄所有的登錄和退出。

     

    System Identification:

    主機(jī)號(hào)、操作系統(tǒng)名、版本號(hào)等信息。unamegethostname來(lái)獲取。

     

    Time and Date Routines

    提供一系列的時(shí)間的相關(guān)函數(shù),具有不同的表示方式。有個(gè)不同時(shí)間函數(shù)之間的關(guān)系圖可作

    參考。

     

    Chapter 7. Process Environment

     

    main函數(shù):

    在執(zhí)行之前,內(nèi)核通過(guò)start-up routine(通常是由匯編編寫的)來(lái)執(zhí)行main

     

    進(jìn)程終止:

    多種exit的終止:exit(會(huì)關(guān)閉打開(kāi)的流), _exit, Exit,還有線程的pthread_exit

    atexit注冊(cè)終止時(shí)調(diào)用的函數(shù),按照注冊(cè)的順序,反序依次調(diào)用。

    shell命令:echo $? 查看程序的返回狀態(tài)。

     

    命令行參數(shù):

    沒(méi)什么好說(shuō)的

     

    環(huán)境列表:

    很少用到,主要是程序運(yùn)行時(shí)的環(huán)境變量,如:HOMESHELLPATHUSERLOGNAME等。

     

    C程序的內(nèi)存布局:

    Text Data BSS Stack, Heap.

    Text是程序的代碼段。

    Data是程序中初始化了的全局、靜態(tài)數(shù)據(jù)變量。

    BSS是程序中未初始化的全局、靜態(tài)數(shù)據(jù)變量。即使全局、靜態(tài)數(shù)據(jù)變量初始化為0仍然是屬于BSS段。

    Stack是程序中的局部變量,由高地址到低地址向下增長(zhǎng)。

    Heapmalloc調(diào)用動(dòng)態(tài)分配的內(nèi)存,由低地址到高地址向上增長(zhǎng)。

    注意:定義的字符串常量,其中變量算Data,而字符串的大小是屬于Text的。

     

    共享庫(kù):

    好處是1.共享,減少可執(zhí)行文件的大小 2.庫(kù)更新時(shí),使用庫(kù)的每個(gè)程序都不用重新鏈接。

    編譯時(shí)用$ cc -static hello1.c 就取消了使用共享庫(kù),編譯出的程序很大。

     

    內(nèi)存分配:

    malloc calloc realloc

     

    環(huán)境變量:

    提供讀取和設(shè)置環(huán)境變量的接口,getenvsetenv。。用處大概就是通過(guò)程序來(lái)設(shè)置和修改環(huán)境變量。

     

    setjmplongjmp

    用處是處理有深度嵌套調(diào)用的不同函數(shù)間的錯(cuò)誤情況。用goto只能是本函數(shù)內(nèi)的局部跳轉(zhuǎn),這兩個(gè)函數(shù)就可以在函數(shù)間進(jìn)行跳轉(zhuǎn)。

    有問(wèn)題是跳轉(zhuǎn)會(huì)影響不同類型變量的狀態(tài),對(duì)于沒(méi)有優(yōu)化編譯的程序,即使是register變量也是放在內(nèi)存中,因此所有類型的變量仍然得到內(nèi)存中的值。但是優(yōu)化-O編譯的程序,由于自動(dòng)變量、register變量是在寄存器中,當(dāng)執(zhí)行setjmp時(shí),會(huì)從寄存器中讀取數(shù)值,setjmp之后的重新賦值將不起作用。而全局、靜態(tài)、以及volatile變量仍在內(nèi)存中,值不會(huì)受到影響。因此,當(dāng)寫可移植性非局部跳轉(zhuǎn)代碼時(shí),應(yīng)使用volatile屬性。

     

    getrlimitsetrlimit函數(shù):

    每個(gè)進(jìn)程都有資源限制的一個(gè)集合。如進(jìn)程可用的總內(nèi)存的大小,core文件的大小,創(chuàng)建文件的最大字節(jié)數(shù)等等。

    包括軟限制和硬限制。可以設(shè)置軟限制小于等于硬限制。可以降低硬限制大于等于軟限制但不可逆。只有超級(jí)用戶進(jìn)程才能提升硬限制。

    資源限制影響調(diào)用的進(jìn)程,并由子進(jìn)程繼承。一般內(nèi)建到shell中設(shè)置資源限制。

     

    Chapter 8. Process Control

    posted on 2010-07-29 16:26 何克勤 閱讀(1463) 評(píng)論(0)  編輯  收藏 所屬分類: GNU Linux/Unix
    主站蜘蛛池模板: 免费在线观看亚洲| 亚洲youwu永久无码精品| 亚洲一级特黄特黄的大片| 黄色免费在线网址| 亚洲精品日韩一区二区小说| 九九九精品视频免费| 人成午夜免费视频在线观看| 亚洲国产高清精品线久久| 亚洲性无码av在线| h在线看免费视频网站男男| 九九精品免费视频| 国产亚洲人成A在线V网站| 亚洲日日做天天做日日谢| 和老外3p爽粗大免费视频| 在线观看AV片永久免费| 国产亚洲美女精品久久久久狼| 亚洲日韩精品无码专区 | 国产aa免费视频| 日韩亚洲AV无码一区二区不卡| 国产亚洲综合久久| 精品无码国产污污污免费网站国产| 日韩版码免费福利视频| 亚洲国产成人一区二区精品区| 鲁死你资源站亚洲av| 91嫩草免费国产永久入口| 亚洲中文字幕不卡无码| 久久精品国产亚洲av麻豆色欲| 一级做a爰片久久毛片免费看| 毛片基地免费观看| 色婷婷亚洲十月十月色天 | 免费视频成人国产精品网站 | 日韩精品极品视频在线观看免费| 免费一级做a爰片久久毛片潮喷| 亚洲国产成人资源在线软件| 亚洲av最新在线观看网址| 97公开免费视频| 日韩va亚洲va欧洲va国产| 国产V片在线播放免费无码| 日本成人免费在线| 涩涩色中文综合亚洲| 国内精品免费麻豆网站91麻豆|