其它程序通訊方法

2021-03-04 09:56:55 字數 1900 閱讀 4447

一般的檔案訪問函式(close,read,write)等可用於fifo.當開啟fifo時,非阻塞標誌(o_nonblock),,沒有使用o_nonblock訪問要求無法滿足時程序將阻塞

如果試圖讀取空的fifo,將導致程序阻塞。

使用o_nonblock,訪問要求無法滿足時不阻塞,立刻出錯返回,errno是enxio

二、訊號通訊

sighup:從終端上發出的結束訊號

sigint:來自鍵盤的中斷訊號(ctrl-c)

sigkill:該訊號結束接收訊號的程序

sigterm:kill命令發出的訊號

sigchld:標識子程序停止或結束的訊號

sigstop:來自鍵盤(ctrl-z)或除錯程式的停止執行訊號,

訊號處理:

1、忽略此訊號----大多數的訊號都按這種方式進行處理,但sigkill和sigstop不能被忽略

因為他們向超級使用者提供了一種終止或停止程序的方法

2、執行使用者希望的動作,

3、執行系統預設動作,----大多數的訊號的系統預設動作是終止該程序

傳送訊號的主要函式有kill和raise kill既可以向自身傳送訊號,也可以向其它程序傳送

而raise函式是向程序自身傳送訊號 kill -s 訊號型別, 程序號。

#include

#include

int kill(pid_t pid,int signo)

int raise(int signo)

使用alarm函式可以設定乙個時間值(鬧鐘時間),當所設定的時間到了時,產生sigalrm訊號

如果不捕此訊號,則預設動作是終止該程序

#include

unsigned int alarm(unsigned int seconds)

經過指定的seconds秒之後會產生訊號sigalrm

pause 函式使呼叫程序掛起直到捕捉到乙個訊號

#include

int pause(void) 只有執行了乙個訊號處理函式後,掛起才結束

訊號處理的主要方法有:一是用簡單的signal函式,另一種是使用訊號集函式組

#include

void(*signal(int signo,void (*func)(int)))(int)

typedef void(*sighandler_t)(int)

sighandler_t signal(int signum,sighandler_t handler)

func可能是:1、sig_ign:忽略此訊號,2、sig_dfl:按系統預設方式處理 3、訊號處理函式名

三、記憶體共享

步驟:1、建立共享記憶體,使用shmget函式 2、對映共享記憶體,將這段建立的共享記憶體對映到具體的程序

空間去,使用shmat函式。

int shmget (key_t key,int size ,int shm***)

key標識共享記憶體的鍵值:0/ipc_private,當key的取值為ipc_private,則函式shmget()

將建立一塊新的共享記憶體;如果key的取值為0,而引數shm***中又設定ipc_private這個

標誌,則同樣會建立一塊新的共享記憶體

如果成功,返回共享記憶體識別符號;如果失敗返回-1;

對映:int shmat(int shmid,char *shmaddr,int flag)

shmid:shmget函式返回的共享儲存識別符號,而第二個是引數是對映的位址,如果是0,則表示系統自動幫你

找乙個位址

flag:決定以什麼方式來確定對映的位址(通常為0)

返回成功,則返回共享記憶體對映到程序中的位址,如果失敗返回-1

共享記憶體,當乙個程序不再需要共享記憶體時,需要把它從程序位址空間中脫離

int shmdt(char *shmaddr)

程序間通訊方法比較

win32應用程式中程序間通訊方法分析與比較 1 程序與程序通訊 程序是裝入記憶體並準備執行的程式,每個程序都有私有的虛擬位址空間,由 資料以及它可利用的系統資源 如檔案 管道等 組成。多程序 多執行緒是windows作業系統的乙個基本特徵。microsoft win32應用程式設計介面 appli...

序列通訊程序

1 從鍵盤上讀入一串字元並在本機上顯示 data segment msg1 db 13,10,please input a char 13,10,13,10,ddd1 db 13,10,13,10 ddd2 db 81 dup data ends code segment assume cs cod...

程序間通訊 linux

程序間通訊 1,使用共享記憶體 共享記憶體允許兩個或更多程序共享一給定的儲存區。因為資料不需要在各個程序之間複製,所以這是最快的一種程序間通訊方式。通過mmap 可以將檔案對映到不同的程序空間中,將他們作為多個程序共享的記憶體實現程序間通訊。利用mmap 進行程序間的資訊互動是無格式的,可以自己定義...