① 作業系統嚴格意義將指的是核心部分,核心指的是一種控制硬體的軟體,為其他應用軟體提供執行環境
② 寬泛來說,是指核心和一些軟體應用等
在檔案檔案中定義了errno 以及可以賦予它的各個常量。這些常量都以e開頭。該變數在標頭檔案中的定義
#ifndef errno
extern int errno;
#endif
因為,errno可以把最後一次呼叫c的錯誤**保留,如果最後一次呼叫c函式成功,則不會更改errno,所以如果你要使用之前,可以先清空errno,然後通過errno判斷下面要執行的函式是否成功。另外,任何函式都不會將errno的值設定為0,而且中的所有常量都不為0.
把errno轉換為相應文字:
1> 使用strerror函式
函式原型:
char * strerror(int errno)
使用方法:
fprintf(stderr, "%s", strerror(errno));
2> 使用perror函式
函式原型:
void perror(const char *s)
使用說明:
引數s指定的字串是要先列印出來的資訊,可以由我們自己定義,然後系統會在s字串後加上錯誤原因的字串。
下面是乙個例程:
#include "apue.h"
#include int
main(int argc, char *argv)
//編譯成 a.out 檔案,執行方式:./a.out
輸出:eacces: permission denied
./a.out: no such file or directory
注:errno是全域性變數,如果在多執行緒或者程序程式設計中,子執行緒想要檢視errno確定自己的錯誤型別,可惜該errno被另乙個執行緒更改了,這就出問題了。errno的執行緒/程序安全性指的就是這點,在多執行緒和多程序程式設計中,errno會變為執行緒或程序的私有變數。
posix和iso c將errno定義為乙個符號,它可以是乙個包含出錯編號的整數,也可以是乙個返回出錯編號指標的函式。
extern int *__errno_location(void);
#if !defined _libc || defined _libc_reentrant
/* when using threads, errno is a per-thread value. */
#define errno (*__errno_location ())
#endif
第1章 基礎知識
機器語言是機器指令的集合,由0和1組成,但是很長很複雜,組合語言因此產生。組合語言的主體是彙編指令。彙編指令是機器指令的便於記憶的書寫格式。程式設計師寫完彙編指令通過編譯器轉換為機器碼,機器碼再傳到計算機執行。組合語言有以下三類 1彙編指令 助記符,有對應機器碼 2.偽指令 沒有對應機器碼,編譯器執...
第1章 基礎知識小結
組合語言的組成 組合語言發展至今,有以下3類指令組成 1 彙編指令 機器碼的助記符,有對應的機器碼。2 偽指令 沒有對應的機器碼,由編譯器執行,計算機並不執行。3 其他符號 如 等,由編譯碼識別,沒有對應的機器碼。儲存單元 1byte 位元組 8bit 二進位制位 1kb 1024b 1mb 102...
unix 基礎知識(章節1)
檔案描述符 file descriptor 通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案,在核心建立或者開啟乙個檔案時,都返回乙個檔案描述符。可以使用這個檔案描述符讀寫檔案。如果不做特殊處理,這三個描述符都鏈結向終端 但大多數shell提供一種方法,使其中乙個或所有重新定向到某個檔...