UNIX 高階程式設計學習記錄 概述

2021-10-24 03:58:22 字數 3052 閱讀 4691

1、程式

程式是乙個儲存在磁碟某個目錄上的可執行檔案,核心使用exec函式將程式讀入記憶體,並執行程式。

2、程序

程序是程式執行的例項 ,用於控制程序的有3個主要的函式。 fork() 、 exec() 、 waitpid()

exec函式有7種變體。但它們總稱為exec函式。

3、執行緒

通常情況下,乙個程序只有乙個控制線程。

也可以多個控制線程可以充分利用多處理器系統的並行能力。

乙個程序內所有的執行緒共享同一位址空間、檔案描述符、棧以及與程序相關屬性。因為它們能訪問同一儲存區,所以各執行緒在訪問共享資料時需要採取同步措施以避免不一致性。

與程序類似,執行緒也用id 標識,但執行緒的id 只在它所屬的程序內起作用。我們可以使用改執行緒id 引用它。進行處理。執行緒id 只在它所屬的程序內有意義。

在c語言標頭檔案 中定義了出錯的狀態碼和出錯原因

在ubuntu 系統中, 標頭檔案 errno.h 位於/usr/include/asm-generic/errno.h

在c語言中定義了兩個標準函式用來輸出錯誤出錯訊息。

//1

#include

char

*strerror

(int errnum)

;

errnum 通常是errno 的值 ,strerror對映為對應出錯的訊息。並返回指向此字串的指標。

//2

#include

void

perror

(const

char

*msg)

;

perror 是根據errno 的當前 值進行輸出對應的出錯訊息。

輸出結果為 先輸出 msg 指向的字串 ,然後冒號 之後出錯的訊息,最後換行符。

1 #include 

2 #include

3 #include

4int

main

(int argc,

char

*ar**)

5

輸出結果為:

可根據輸出來判斷程式出錯的原因,及時進行處理,排除故障。或者對可能的出錯進行判斷,防止程式崩潰,提高程式的健壯性。

使用者id,是用來標識各個不同的使用者的。

組id , 用來標識使用者的屬組。

組檔案將組名 對映為 組id 可以在 /etc/group 中查詢。

利用程式獲取使用者id 和組id

包含標頭檔案

getuid() 獲取使用者id getgid() 獲取使用者組id。

#include

intmain()

訊號用於通知 程序發生了某種情況

程序有以下三種處理訊號的方式

1、忽略訊號。

2、按系統預設方式處理。終止程序。

3、提供乙個函式,訊號發生時呼叫函式。

終端鍵盤上有兩種產生訊號的方法。 中斷鍵(crtl + c ) 或者退出鍵(ctrl + \ ) 它們被用於中斷當前執行的程序。

也可使使用kill 函式。在乙個程序裡向另乙個程序傳送乙個訊號。

為了捕捉到訊號,程式需要呼叫signal 函式 , 其中指定了當產生sigint 訊號時,要呼叫的函式名字。

if

(signal

(sigint, sig_int)

== sig_err)

在程式執行時使用鍵盤輸入 ctrl + c 程序使用signal 函式接受到sigint 後沒有按照預設方式結束程序。而是使用sig_int 函式去處理。由於除於迴圈之中,所以無法通過ctrl + c 關閉程式。

需要包含 標頭檔案 #include

**於部落格

1、日曆時間

日曆時間從1970 年 1號 0 點開始,以秒計算。可以通過時區得到本地時間 使用tm 結構體可以獲取 秒數 對應的詳細時間。

2、程序時間,也被稱為cpu 時間 。用以度量程序使用的**處理器資源。

當度量乙個程序執行的時間時,unix 系統為乙個程序維護了3個程序時間值。

a、時鐘時間

b、使用者cpu時間

c、系統cpu時間

時鐘時間又稱為牆上時鐘時間,它是程序執行的時間總量,其值與系統中同時執行的程序數有關。

使用者cpu時間是執行使用者指令所用的時間量。

系統cpu時間是為該程序執行核心程式所經歷的時間。為了獲取乙個程序的程序時間可以使用shell 命令 time

$ time date

使用相關標頭檔案

#include fork() execlp () 函式

#include exit()

#include waitpid()函式標頭檔案

#include errno 變數

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include

7static

void

sig_int()

8111213

intmain()

14else

if(pid ==0)

3540if(

(pid =

waitpid

(pid,

&status,0)

)<0)

41printf

("waitpid error");

42printf

("%%");

43}44return0;

45}

注意 程式執行後,無法使用 ctrl + c 關閉。因為會signal 會捕獲這個訊號,並呼叫sig_int 函式處理。不會以預設方式退出。可以使用 ctrl + \ 退出。

unix 高階程式設計學習 程序

include fork 函式 1.建立返回0,則是當前子程序。2.建立返回大於0,則是父程序。3.如果建立出錯則是 1.include include includeint main void else if pid 0 else if pid 0 return 0 include include...

Unix高階程式設計學習筆記(2)

linux系統可以看成是乙個由檔案組成的系統,在linux系統中,基本上所有的裝置,硬體,資源都被看成乙個檔案,比如,在 dev下面我們可以看到我們的硬碟sda1,終端裝置ttyn,在 proc目錄下面我們可以看到當前的記憶體資訊,cat proc meminfo,可以檢視cpu的資訊 cat pr...

UNIX環境高階程式設計學習筆記

include include include include int main int argc,char argv err sys can t open s argv 1 while dirp readdir dp null printf s n dirp d name closedir dp ...