第1章 UNIX基礎知識

2021-08-08 12:12:31 字數 1338 閱讀 5381

① 作業系統嚴格意義將指的是核心部分,核心指的是一種控制硬體的軟體,為其他應用軟體提供執行環境

② 寬泛來說,是指核心和一些軟體應用等

在檔案檔案中定義了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提供一種方法,使其中乙個或所有重新定向到某個檔...