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 ...