原创 UNIX環境高級編程學習筆記(一)UNIX基礎知識

1.操作系統可被定義爲一種軟件,它控制計算機硬件資源,提供程序運行環境。通常稱爲內核(kernel)。 2.內核的接口被稱爲系統調用。公共函數庫建在系統調用接口之上,應用程序既可使用公共函數庫,也可使用系統調用。shell是一個

原创 UNIX環境高級編程學習筆記(六)標準I/O庫

1.流和FILE對象。 文件I/O中諸如read、write的函數都是圍繞文件描述符的,而標準I/O庫中的I/O函數是圍繞流進行的。當標準I/O庫打開或創建一個文件時,我們使一個流與一個文件相關聯。 當打開一個流時,標準I/O函數fop

原创 UNIX環境高級編程學習筆記(五)文件和目錄

本章主要描述文件系統的其他特徵和文件的性質。從stat函數開始,逐個說明stat結構的每一個成員,並詳細說明UNIX文件系統的結構和符號鏈接。 1.四個stat函數 #include <sys/stat.h> int stat(const

原创 STL 源碼剖析讀書筆記二:迭代器與traits

1. 迭代器概述 迭代器是一種抽象的設計概念,現實程序語言中並沒有直接對應這個概念的實物。《設計模式》中對於迭代器模式的定義爲:提供一種方法,使之能夠依序訪問某個聚合物所含的各個元素,而又無需暴露該聚合物的內部表述方式。 STL 的中心思

原创 UNIX環境高級編程學習筆記(四)不調用fcntl函數實現dup2的功能

dup和dup2函數: int dup(int fd) ; int dup2(int fd, int fd2) ; dup和dup2都可以用來複制一個現有的文件描述符,返回的新的文件描述符與fd共享一個文件表項。 兩者不同之處是,d

原创 new/delete operator、operator new/delete、placement new

1.new / delete operator 調用operator new分配足夠的空間,並調用相關對象的構造函數。 使用方法如下: class Foo {} Foo *pf = new Foo; delete pf; 2.operat

原创 STL 源碼剖析讀書筆記三:序列式容器之 vector、list

1. STL 中的容器 容器,置物之所也。STL 容器即是將運用最廣的一些數據結構實現出來。如下圖所示: 上圖以內縮方式來表達基層和衍生層的關係。所謂衍生,並非派生關係,而是內含關係。例如 heap 內含一個 vector,priori

原创 UNIX環境高級編程學習筆記(十)爲何 fork 函數會有兩個不同的返回值

以下是基於 linux 0.11 內核的說明。 在init/main.c第138行, 在move_to_user_mode()之後,進程0通過fork()產生子進程,實際就是進程1(init進程)。 在main.c第23行: stati

原创 STL 源碼剖析讀書筆記一:空間配置器

1. STL 的空間配置器 STL 空間配置器在運用的角度來說,是最不需要介紹的,它總是隱藏在一切組件背後。但若以 STL 的實現角度而言,第一個需要理解的就是空間配置器。 根據 STL 規範,以下是 allocator 的必要接口: a

原创 STL 源碼剖析讀書筆記五:序列式容器之 heap、priority_queue、slist

1. heap 1.1 heap 概述 heap 並不歸屬 STL 容器組件,它是 priority_queue 的幕後助手。priority_queue 允許用戶以任何次序將任何元素推入容器,但取出元素時一定是從優先權最高的元素開始取。

原创 UNIX環境高級編程學習筆記(九)進程控制

1.進程標識 每個進程都有一個非負整型表示的唯一進程ID。因爲進程ID標識符總是唯一的,常將其用作其他標識符的一部分以保證其唯一性。進程ID是可複用的,當一個進程終止後,其進程ID就成爲複用的候選者。 ID爲0的進程通常是調度進程,常常被

原创 linux內核空間和用戶空間的是怎樣區別的,如何交互,如何從用戶空間進入內核空間

linux驅動程序一般工作在內核空間,但也可以工作在用戶空間。下面我們將詳細解析,什麼是內核空間,什麼是用戶空間,以及如何判斷他們。   Linux簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也爲0~

原创 C語言 可變參數函數總結

1.可變參數函數 可變參數函數,顧名思義,即函數的參數個數是可變的,例如 printf 的函數原型是: int printf ( const char * format, ... ); 可變參數函數的聲明形式基本類似:只是在參數列表最尾部

原创 格式化I/O(常用的 sprintf 和 sscanf 總結)

1.格式化輸出 #include <stdio.h> int printf(const char *restrict format, ...); int fprintf(FILE *restrict fp, const char *res

原创 gcc 總結

1.gcc 的語法如下: gcc (選項) (參數) 2.常見選項如下: -E:僅執行編譯預處理,直接輸出預編譯結果 -S:執行源代碼到彙編代碼的轉換,輸出彙編代碼 -c:僅執行編譯操作,不進行連接操作 -o:指定生成的輸出文件 -Wa