Linux程式設計筆記 程序複製

2021-06-05 20:10:38 字數 2339 閱讀 9676

最近在寫乙個驅動測試程式的時候想用一下程序間通訊的功能,可是就是想不起來應該怎麼寫,所以重新拿起《

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