最近在寫乙個驅動測試程式的時候想用一下程序間通訊的功能,可是就是想不起來應該怎麼寫,所以重新拿起《
linux
程式設計》再學一遍,然後用半天的時間,寫乙個簡單的筆跡,以備後用。
一、程序
使程序同時執行多個函式的方法有:一、使用多執行緒;二、原程式中建立乙個分離程序
本文主要關注的是程序間的通訊,所以下面的內容介紹的是分離程序的做法。 1.
複製程序映像
#include
#include
pid_t fork(void);
子程序中
fork
呼叫返回的是
0,如果
fork
失敗返回-1。
2.等待程序
在對複製程序映像作示例前還要特別注意乙個現象就是殭屍程序(
zombie
),處理這種現象的函式:
#include
#include
pid_twait(int *stat_loc);
pid_twaitpid(pid_t pid, int *stat_loc, int options);
wait
系統呼叫將暫停父程序直到他的子程序結束為止;
waitpid
用來等待某個特定程序的結束;
通過讀取
*stat_loc
得到的錯誤狀態資訊:
#include
中定義了這些巨集。
wifexited(stat_val) :
如果子程序正常結束,它就取乙個非0;
wexitstatus(stat_val) :
如果wifexited(stat_val)非0
,它返回子程序的退出碼;
wifsignaled(stat_val) :
如果子程序因為乙個未捕獲的訊號而終止,他就取乙個非0;
wtermsig(stat_val) :
如果wifsignaled(stat_val)非0
,他返回乙個訊號**;
wifstopped(stat_val) :
如果子程序意外終止,他就取乙個非0;
wstopsig(stat_val) :
如果wifstopped非0
,他返回乙個訊號**;
殭屍程序:子程序結束了,其依舊會在程序表中,不會立即釋放,知道其父程序結束為止。因為他的退出碼還需要被別的程序所使用到,以備父程序
wait
呼叫。這時他就是乙個殭屍程序
例程:#include
#include
#include
#include
intmain ()
printf("process is finish\n");
if (res != 0)
return 0;}3
.訊號
訊號:是
unix/linux
系統響應某些條件而產生的乙個事件。
訊號還可以作為程序間傳遞訊息或修改行為的一種方式。接收到訊號的程序會相應的採取一些行動。訊號是由某些錯誤條件而生成的:如記憶體段衝突,浮點處理錯誤,非法指令等。
#include
常見的:
sigint sigquit sigabort sigalrm sigill sigterm
如果接收到訊號中的乙個,但事先沒有捕獲他,程序將會立即終止。
程式中使用:
signal()
庫函式來處理訊號。
#include
signal(sigint,sig_dfl);
傳送訊號: 呼叫
kill()
函式向其他程序包括自己傳送訊號。
#include
#include
int kill ( pid_t pid , int sig );
鬧鐘的函式:
alarm()
在經過預定時間後傳送乙個
sigalrm
訊號,seconds
秒後傳送一條
sigalrm
訊號,將
seconds
設定為0
,將取消所有已經設定的鬧鐘請求:
#include
unsigned int alarm(unisgned intseconds);
掛起乙個程序的函式:
把程式執行掛起直到乙個訊號出現為止。
#include
int pause(void) ;
還有訊號集的部分見《
linux
程式設計(第三版)》
11.4.3
訊號集:
403頁
Linux程式設計筆記 程序間通訊
二 程序間通訊 1.管道 管道用於相關的程序 特別是父子程序的 間的通訊。使用 read 和write 進行讀寫操作。include intpipe int file descriptor 2 建立管道 file desciptor 0 為讀取端,file desciptor 1 為寫入端。例程 i...
linux系統程式設計筆記 程序
使用者許可權以及組許可權 system 程序會計 程序時間 守護程序 系統日誌 型別 pid t include include include include intmain else getchar printf pid d end n getpid return0 include includ...
Linux程序程式設計
一 與程序相關的系統函式 1.getpid include 提供pid t型別的定義 include 提供函式的定義 pid t getpid void 返回值為當前程序的程序id 2.getppid include 提供pid t型別的定義 include 提供函式的定義 pid getppid ...