1、程序間通訊:
庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊
pid_t pid; //程序號的型別定義
pid = fork(); //建立程序
if(pid == 0){}; //子程序
if(pid == 1){}; //父程序
2、執行緒間通訊:
庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊
pthread_t tid;//執行緒的型別定義
int ret;
//建立執行緒。執行緒識別符號、執行緒屬性、執行緒函式的起始位址、傳遞給執行緒的引數
ret = pthread_create(&tid, null, fun, (void *)str);
程序:
1 #include 2 #include 3
4 int main()
5 18 }
19 if(pid > 0) //父程序
20
27 process_inter = 1;
28 }
29 while(1);
30 return 0;
31 }
執行:(ctrl + c 結束執行)
執行緒:注意---gcc
編譯時,需加
-lpthread
引數。
pthread不是
linux
下的預設的庫,也就是在鏈結的時候,無法找到phread庫中
庫函式的入口位址,於是鏈結會失敗。
1 //注意:編譯時 gcc -lpthread -o build thread.c
2 /*
3 * file: thread.c
4 * --------------
5 *
6 */
7 8 #include 9 #include 10
11 int thread_inter = 0; //全域性變數 實現執行緒間通訊,在使用者空間
12 void *fun(void *var)
13 21 }
22 23 int main() //主線程
24
35 for(i = 0; i < 5; i++)
36
40 thread_inter = 1; //將 thread_inter 置1,子程序開始執行
41 while(1);
42 return 0;
43 }
執行:
引數 -lpthread (指定鏈結 pthread 庫)
Linux C程序與多執行緒入門 3 訊號
訊號是系統響應某些狀況而產生的事件,程序在接受到訊號時會採取相應的行動。訊號可以明確地由乙個程序產生傳送到另外乙個程序,用這種辦法傳遞資訊或協調操作行為。程序可以生成訊號 捕捉並相應訊號或遮蔽訊號。訊號的名稱是在標頭檔案signal.h裡定義。下面我列出一部分,如下 訊號名稱 說明 sigalrm ...
Linux C程序與多執行緒入門 3 訊號
概念 訊號是系統響應某些狀況而產生的事件,程序在接受到訊號時會採取相應的行動。非常像微控制器的中斷 訊號可以明確地由乙個程序產生傳送到另外乙個程序,用這種辦法傳遞資訊或協調操作行為。程序可以生成訊號 捕捉並相應訊號或遮蔽訊號。訊號的名稱 是在標頭檔案 signal.h 裡定義。下面我列出一部分,如下...
linux c 程序學習
1.fork 由於fork後的父程序與子程序的優先順序是一樣的,所以會存在父程序已經退出了而子程序還在執行,這時候的子程序就是孤兒程序,會被init程序收養,所以這時候getppid得到的1。int main exit 0 2.vfork 由vfork也是用來建立程序,但是子程序是共享父程序的位址空...