linux man手冊各章節的意義與用法

來源:互聯網
上載者:User

Linux的man很強大,該手冊分成很多section,使用man時可以指定不同的section來瀏覽,各個section意義如下:
1 - commands
2 - system calls
3 - library calls
4 - special files
5 - file formats and convertions
6 - games for linux
7 - macro packages and conventions
8 - system management commands
9 - 其他
解釋一下,
1是普通的命令
2是系統調用,如open,write之類的(通過這個,至少可以很方便的查到調用這個函數,需要加什麼標頭檔)
3是庫函數,如printf,fread
4是特殊檔案,也就是/dev下的各種裝置檔案
5是指檔案的格式,比如passwd, 就會說明這個檔案中各個欄位的含義
6是給遊戲留的,由各個遊戲自己定義
7是附件還有一些變數,比如向environ這種全域變數在這裡就有說明
8是系統管理用的命令,這些命令只能由root使用,如ifconfig
想要指定section就直接在man的後面加上數字,比如 :
man 1 ls
man 3 printf
等等
對於像open,kill這種既有命令,又有系統調用的來說,man open則顯示的是open(1),也就是從最前面的section開始,如果想查看open系統調用的話,就得man 2 open

關於庫函數和系統調用

庫函數是高層的,完全運行在使用者空間, 為程式員提供調用真正的在幕後完成實際事務的系統調用的更方便的介面。系統調用在核心態運行並且由核心自己提供。標準C庫函數printf()
可以被看做是一個通用的輸出語句,但它實際做的是將資料轉化為符合格式的字串並且調用系統調用 write()
輸出這些字串。

是否想看一看printf() 究竟使用了哪些系統調用? 這很容易,編譯下面的代碼。

 

#i nclude <stdio.h>int main(void){ printf("hello"); return 0; }

使用命令gcc -Wall -o hello hello.c 編譯。用命令 strace hello
跟蹤該可執行檔。是否很驚訝? 每一行都和一個系統調用相對應。 strace是一個非常有用的程式,它可以告訴你程式使用了哪些系統調用和這些系統調用的參數,傳回值。 這是一個極有價值的查看程式在幹什麼的工具。在輸出的末尾,你應該看到這樣類似的一行
write(1, "hello", 5hello) 。這就是我們要找的。藏在面具printf()
的真實面目。既然絕大多數人使用庫函數來對檔案I/O進行操作(像 fopen, fputs, fclose)。 你可以查看man說明的第二部分使用命令man 2 write 。man說明的第二部分專門介紹系統調用(像kill()
read() )。 man說明的第三部分則專門介紹你可能更熟悉的庫函數(像cosh()
random() )。

你甚至可以編寫代碼去覆蓋系統調用,正如我們不久要做的。駭客常這樣做來為系統安裝後門或木馬。 但你可以用它來完成一些更有益的事,像讓核心在每次某人刪除檔案時輸出 “
Tee hee, that tickles! ” 的資訊。

 

 

自己總結:

從程式完成的功能來看,函數庫提供的函數通常是不需要作業系統的服務,函數是在使用者空間內執行的,除非函數涉及到I/O操作等,一般是不會切到核心態的。系統調用 是要求作業系統為使用者提供進程,提供某種服務,通常是涉及系統的硬體資源和一些敏感的軟體資源等。

     函數庫的函數,尤其與輸入輸出相關的函數,大多必須通過Linux的系統調用來完成。因此我們可以將函數庫的函數當成應用程式設計人員與系統調用程式之間的一個中介層,通過這個中介層,我們可以用一致的介面來安全的調用系統調用。這樣程式員可以只要寫一次代碼就能夠在不同版本的linux系統間使用積壓種具體實現完全不同的系統調用。至於如何?對不同的系統調用的相容性問題,那是函數庫開發人員所關心的問題。

     從程式執行效率來看,系統調用的執行效率大多要比函數高,尤其是處理輸入輸出的函數。當處理的資料量比較小時,函數庫的函數執行效率可能比較好,因為函數庫的作法是將要處理的資料先存入緩衝區內,等到緩衝區裝滿了,再將資料一次寫入或者讀出。這種方式處理小量資料時效率比較高,但是在進行系統調用時,因為使用者進程從使用者模式進入系統核心模式,中間涉及了許多額外的任務的切換工作,這些操作稱為環境切換,此類的額外工作會影響系統的執行效率。但是當要處理的資料量比較大時,例如當輸入輸出的資料量超過檔案系統定義的盡寸時,利用系統調用可獲得較高的效率。

     從程式的可移植性的角度來看,相對於系統調用,C語言的標準備函數庫(ANSI C) 具備較高的可移植性,在不同的系統內容下,只要做很少的修改,通常情況是不需要修改的。

http://samuschen.iteye.com/blog/700944

相關文章

聯繫我們

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