C陷阱與缺陷(五)

2021-07-28 23:59:04 字數 2351 閱讀 5341

庫函式

函式庫呼叫

系統呼叫

在所有的ansi c編譯器版本中,c庫函式是相同的

各個作業系統的系統呼叫是不同的

它呼叫函式庫中的一段程式(或函式)

它呼叫系統核心的服務

與使用者程式相聯絡

是作業系統的乙個入口點

在使用者位址空間執行

在核心位址空間執行

它的執行時間屬於「使用者時間」

它的執行時間屬於「系統」時間

屬於過程呼叫,呼叫開銷較小

需要在使用者空間和核心上下文環境間切換,開銷較大

在c函式庫libc中有大約300個函式

在unix中大約有90個系統呼叫

典型的c函式庫呼叫:system fprintf malloc

典型的系統呼叫:chdir fork write brk;

庫函式呼叫通常比行內展開的**慢,因為它需要付出函式呼叫的開銷。但系統呼叫比庫函式呼叫還要慢很多,因為它需要把上下文環境切換到核心模式。

c語言中文網

signal() 函式

c 庫函式

void (*signal(int sig, void (*func)(int)))(int) 

設定乙個函式來處理訊號,即帶有

sig 

引數的訊號處理程式。

signal() 函式的宣告。

void (*signal(int sig, void (*func)(int)))(int)

菜鳥教程

errno函式

標頭檔案:#include

函式原型:errno

功能:記錄系統的最後一次錯誤**

引數:無

返回值:錯誤代號(整型值)

if((sockfd = socket(af_inet, sock_dgram, 0)) == -1)  

printf("socket opened successfully \n"); 

//errno 返回整型錯誤代號。

getchar函式

概念:

getchar 由巨集實現:

#define getchar() getc(stdin)

。getchar

有乙個int

型的返回值

.當程式呼叫

getchar時.

程式就等著使用者按鍵

.使用者輸入的字元被存放在鍵盤緩衝區中

.直到使用者按回車為止

(回車字元也放在緩衝區中

).當使用者鍵入回車之後

,getchar

才開始從

stdin

流中每次讀入乙個字元

.getchar

函式的返回值是使用者輸入的第乙個字元的

ascii碼,

如出錯返回

-1,且將使用者輸入的字元回顯到螢幕

.如使用者在按回車之前輸入了不止乙個字元

,其他字元會保留在鍵盤快取區中

,等待後續

getchar

呼叫讀取

.也就是說

,後續的

getchar

呼叫不會等待使用者按鍵

,而直接讀取緩衝區中的字元

,直到緩衝區中的字元讀完為後

,才等待使用者按鍵.

1.getchar是以行為單位進行訪問的。

當用getchar進行輸入時,如果輸入的第乙個字元為有效字元

(即輸入是檔案結束符

eof,

windows

下為組合鍵

ctrl+z

, unix/linux

下為組合鍵

ctrl+d)

,那麼只有當最後乙個輸入字元為換行符

'\n'(

也可以是檔案結束符

eof,

eof將在後面討論

)時,

getchar

才會停止執行,整個程式將會往下執行。譬如下面程式段:

while((c = getchar()) != eof)

即無論你輸入多少字元,只有當換行或結束時,才會執行while迴圈。

2.getchar()的返回值一般情況下是字元,但也可能是負值,即返回

eof。

char c;

c = getchar();

為了能夠讓所定義的變數能夠包含getchar函式返回的所有可能的值,正確的定義方法如下,並且本身返回值就是int:

int c;

c = getchar();

檔案操作函式

檔案操作函式api後續再總結說明。

c陷阱與缺陷 陷阱

例1 if x y break 這就話的意思就是把y賦值x,判斷x是否為0,實則是在判斷y是否為0 例2 while c c t c n 這句話的意思就是 c t c n 賦值給c,而有 符本身就是不為0的數,所以這就是while 1 的意思。例3 int x 4,p new int p 2 cou...

C陷阱與缺陷

c語言對於符號 包含乙個或多個字元 的識別規則 每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,繼續讀入下乙個字元,重...

C陷阱與缺陷

1.int num 10 測試一下 num 0 是否 等於 0 num 因為num是首位址 num 0 0 num 2.其實c中只有一維陣列 我們所說的 int a 3 4 只是乙個包含了三個元素 每個元素都是包含了四個整形值的一維陣列 3.int num 10 10 int p num 0 名為n...