簡單寫一下總結
(1)書籍的選擇
個人推薦一下三本:
unix環境高階程式設計
linux系統程式設計
unix/linux程式設計實踐教程
新手入門建議從《linux系統程式設計》入手:
優點是簡單易懂,沒有《unix環境高階程式設計》中關於unix的各種版本的細節,主幹清晰,而且書裡寫了linux系統核心的一些細節,比如:
第二章的虛擬檔案系統,頁快取,頁回寫,第四章的io排程器和io效能,第六章的程序排程。
《unix環境高階程式設計》和《unix/linux程式設計實踐教程》可以同時閱讀,前者適合初學者向中高階高階,後者為前者提供了很多系統程式設計例項,邊學邊實踐有助於理解記憶。
(2)學習的思路
1.建立抽象的意識
作業系統提供了系統呼叫,系統呼叫用來控制系統的資源,而系統的資源是作業系統通過對硬體資源的抽象提供給開發者的。
學習系統程式設計就可以通過類似於資料結構中抽象資料型別的思路來記憶和總結,與某資源相關的系統呼叫。
2.abi
abi是應用程式二進位制介面的縮寫,由核心和工具鏈(編譯器,聯結器等)決定。
abi決定了cpu指令集,可執行檔案的格式,鏈結,庫等。(參考《程式設計師的自我修養》)
3.提供新的間接層的目的是為了提高效率,比如:有了程序又提出執行緒,提出虛擬記憶體,頁快取等。
4.一切可讀寫的都是檔案
linux作業系統中將各種io資源都抽象成檔案,包括目錄,裝置,socke,管道等。
這種抽象是核心通過虛擬檔案系統對映建立的,理解虛擬檔案系統的結構(超級塊,inode等)是理解檔案系統及檔案屬性的關鍵。
i/o操作分為普通的i/o操作和緩衝i/o(c標準庫提供),高階io一般用於伺服器網路程式設計和程序通訊中。
5.shell和程序
shell是核心與使用者互動的介面,要理解程序之間的關係需要理解shell的啟動過程,fork和excu的執行,會話和程序組(前台,後台,守護程序)。
高階主題
6.程序之間的通訊
7.socket程式設計
linux系統程式設計學習筆記
關閉檔案 linux命令列引數解析 int creat const char filename,mode t mode mode指定新建檔案的訪問許可權 return 檔案描述符fd open const char pathname,o create,mode t mode 第二個引數flags為o...
Linux 系統程式設計
1 i o操作 2 檔案和目錄管理 3 記憶體管理 1 建立匿名記憶體對映 2 對映 dev zero檔案 類unix 作業系統中,dev zero是乙個特殊的檔案,當你讀它的時候,它會提供無限的空字元 null,ascii nul,0x00 其中的乙個典型用法是用它提供的字元流來覆蓋資訊,另乙個常...
Linux系統程式設計
1.linux程序 守護程序 脫離終端的後台程序 2.linux程序 殭屍程序 3.linux 下程序通訊 其中setsockopt server sockfd,sol socket,so reuseaddr,on,sizeof on 因為每乙個連線都由本地位址和遠端位址的組合唯一確定,所以只要遠端...