版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章Linux進(jìn)程通信內(nèi)容提要進(jìn)程通信概述管道內(nèi)存映射SystemVIPCPOSIXIPC文件鎖9.1進(jìn)程通信概述進(jìn)程通信概述進(jìn)程需彼此協(xié)同、交換和共享數(shù)據(jù),由于進(jìn)程的用戶空間各自獨(dú)立,無法直接溝通,但它們共享內(nèi)核空間和文件系統(tǒng),可借助內(nèi)核和文件來實(shí)現(xiàn)進(jìn)程間的通信。應(yīng)用編程接口分類API功能描述管道pipe建立無名管道Popen/pclose打開/關(guān)閉命令的標(biāo)準(zhǔn)輸入或輸出mkfifo創(chuàng)建命名管道內(nèi)存映像文件mmap/munmap建立/解除文件至內(nèi)存的映射SystemVIPC信號(hào)量semget創(chuàng)建/打開systemv信號(hào)量semop申請(qǐng)/釋放systemv信號(hào)量semctl操作systemv信號(hào)量消息隊(duì)列msgget創(chuàng)建/打開systemv消息隊(duì)列msgrcv從systemv消息隊(duì)列接收消息msgsnd向systemv消息隊(duì)列發(fā)送消息msgctl操作systemv消息隊(duì)列共享內(nèi)存shmget建立/打開systemv共享內(nèi)存shmat/shmdt建立/刪除systemv共享內(nèi)存映射shmctl操作systemv共享內(nèi)存POSIXIPC信號(hào)量sem_open/sem_close/sem_unlink打開/關(guān)閉/刪除POSIX信號(hào)量sem_wait/sem_post等待/釋放POSIX信號(hào)量Sem_init/sem_destroy初始化/注銷POSIX無名信號(hào)量消息隊(duì)列mq_open/mq_close/mq_unlink打開/關(guān)閉/刪除POSIX消息隊(duì)列mq_getattr/mq_setattr獲取/設(shè)置POSIX消息隊(duì)列屬性mq_receive/mq_send收發(fā)POSIX消息共享內(nèi)存shm_open/shm_unlink打開/刪除POSIX共享內(nèi)存文件鎖flock鎖定/解鎖文件9.2管道管道概述管道是一種進(jìn)程間的單向數(shù)據(jù)傳輸機(jī)制,基于先進(jìn)先出的字節(jié)流,管道有兩個(gè)端點(diǎn),一端用于寫入數(shù)據(jù),另一端用于從管道讀取,讀取的數(shù)據(jù)會(huì)從管道中移走。根據(jù)接口形式的不同,管道可分為無名管道和命名管道。管道的分類1.無名管道無名管道因無對(duì)應(yīng)的管道文件而得名,借助內(nèi)存而非外部文件實(shí)現(xiàn)通信,通常為關(guān)聯(lián)的進(jìn)程間建立通道。2.命名管道命名管道是建立于文件系統(tǒng)的特殊文件,借助文件接口實(shí)現(xiàn)進(jìn)程間通信。創(chuàng)建無名管道頭文件
#include<unistd.h>函數(shù)原型
int
pipe(intfd[2]);功能 創(chuàng)建無名管道。參數(shù)
pipefd[2]:對(duì)文件描述符。
flags:操作方式。返回值 成功返回0,否則返回-1。
無名管道的實(shí)現(xiàn)dentry(目錄項(xiàng))dentryf_opnamed_inodefile(文件描述)task_struct(進(jìn)程控制塊)fd0123465fd[](文件描述符表)file(文件描述)物理頁(yè)寫端讀端dentryf_opread_pipe_fops(文件操作集)write_pipe_fops(文件操作集)..read.write.管道創(chuàng)建命名管道頭文件
#include<sys/types.h> #include<sys/stat.h>函數(shù)原型
int
mkfifo(constchar*pathname,mode_tmode);功能 創(chuàng)建命名管道。參數(shù)
pathname:文件路徑名。
mode:存取權(quán)限。返回值 成功返回0,失敗返回-1。實(shí)例分析charbuffer[BUFSIZ];int
main(int
argc,char*argv[]){
intpipefd[2];
pipe(pipefd);
pid_t
pid=fork(); if(pid==0){ close(pipefd[1]); while(read(pipefd[0],&buffer,1)>0) write(1,&buffer,1); write(1,"\n",1); close(pipefd[0]); _exit(0); }else{ close(pipefd[0]); write(pipefd[1],argv[1],strlen(argv[1])); close(pipefd[1]);
wait(NULL); exit(0); }}9.3內(nèi)存映射內(nèi)存映射概述
內(nèi)存映射是一種將文件的某個(gè)區(qū)域
映射至進(jìn)程用戶地址空間的技術(shù)。內(nèi)存文件為一種特殊類型的文件,其內(nèi)容存儲(chǔ)于內(nèi)存頁(yè)中,例如,位于內(nèi)存文件系統(tǒng)中的文件屬于該類文件,利用內(nèi)存映射可將內(nèi)存文件的某個(gè)區(qū)域同時(shí)映射至多個(gè)進(jìn)程的用戶地址空間,從而實(shí)現(xiàn)進(jìn)程間的通信。POSIXIPC正是通過在內(nèi)存文件上建立內(nèi)存映射構(gòu)建。
mmap/munmap函數(shù)頭文件
#include<sys/mman.h>函數(shù)原型
void*mmap(void*addr,size_t
length,int
prot,int
flags,int
fd,off_toffset);
int
munmap(void*addr,size_tlength);功能 建立/解除內(nèi)存映射。參數(shù)
addr:映射區(qū)起始地址。
length:映射區(qū)大小。
prot:存取權(quán)限。
flags:映射方式。
fd:文件描述符。
offset:文件偏移量。返回值
mmap函數(shù)成功返回映射區(qū)起始地址,失敗返回MAP_FAILED。
munmap函數(shù)成功返回0,失敗返回-1。實(shí)例分析int
main(int
argc,char*argv[]){
int
fd=open("/dev/zero",O_RDWR,0); char*anon,*zero;anon=(char*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);zero=(char*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_FILE|MAP_SHARED,fd,0);
strcpy(anon,argv[1]);
strcpy(zero,argv[1]);
printf("anonymous:%s\tzero-backed:%s\n",anon,zero); switch((fork())){ case0:
strcpy(anon,argv[2]);
strcpy(zero,argv[2]);
munmap(anon,4096);
munmap(zero,4096);
close(fd); return0; } sleep(3);
printf("anonymous:%s\tzero-backed:%s\n",anon,zero);
munmap(anon,4096);
munmap(zero,4096);
close(fd); return0;}9.4SystemVIPC內(nèi)容提要SystemVIPC概述
SystemV信號(hào)量
SystemV消息隊(duì)列
SystemV共享內(nèi)存SystemVIPC概述SystemVIPC源自SystemV系統(tǒng),是一種傳統(tǒng)的進(jìn)程間通信的接口規(guī)范,在各類傳統(tǒng)Unix系統(tǒng)中得到廣泛使用,它由信號(hào)量、消息隊(duì)列和共享內(nèi)存三部分構(gòu)成,可實(shí)現(xiàn)進(jìn)程間的同步、數(shù)據(jù)傳輸和數(shù)據(jù)共享,
自Linux誕生之初,Linux內(nèi)核就提供了對(duì)SystemVIPC的支持。
SystemVIPC通過在內(nèi)核中創(chuàng)建IPC對(duì)象實(shí)現(xiàn),每個(gè)IPC對(duì)象對(duì)應(yīng)一個(gè)唯一的ID。SystemV信號(hào)量
信號(hào)量表示某種資源的數(shù)量,資源的數(shù)量可反映到信號(hào)量的數(shù)值上,當(dāng)信號(hào)量大于0時(shí),表示有資源可供使用,當(dāng)信號(hào)量等于0時(shí),表示已無資源可用,申請(qǐng)資源者需要等待。
SYSTEMV信號(hào)量用信號(hào)量集表示,由若干信號(hào)量組成,可同時(shí)反映多種資源的狀態(tài),一次可支持對(duì)一個(gè)或多個(gè)信號(hào)量的原子操作。SystemV信號(hào)量的操作步驟(1)創(chuàng)建/打開一個(gè)SystemV信號(hào)量集。(2)初始化SystemV信號(hào)量(3)申請(qǐng)/釋放SystemV信號(hào)量(4)當(dāng)SystemV信號(hào)量不再使時(shí),將其刪除。semget函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>函數(shù)原型
int
semget(key_tkey,int
nsems,int
semflg);功能 獲得或創(chuàng)建信號(hào)量。參數(shù)
key:IPC對(duì)象標(biāo)識(shí)。
nsems:信號(hào)量的數(shù)量。
semflg:存取權(quán)限和操作方式。返回值 成功返回信號(hào)量的標(biāo)識(shí),失敗返回-1。信號(hào)量相關(guān)狀態(tài)信息內(nèi)核用數(shù)據(jù)結(jié)構(gòu)記錄每一種信號(hào)量的狀態(tài)信息,例如:unsignedshortsemval;//信號(hào)量當(dāng)前值unsignedshortsemzcnt;//等待信號(hào)量變?yōu)?的進(jìn)程/線程的數(shù)量unsignedshortsemncnt;//等待釋放信號(hào)量的進(jìn)程/線程數(shù)量pid_t
sempid//最近一次修改信號(hào)量的進(jìn)程ID
信號(hào)量的申請(qǐng)與釋放會(huì)修改semval,當(dāng)無信號(hào)量可用時(shí),調(diào)用者進(jìn)程便會(huì)進(jìn)入semncnt和semzcnt關(guān)聯(lián)的等待隊(duì)列。semop函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>函數(shù)原型
int
semop(int
semid,struct
sembuf*sops,unsignednsops);功能 獲得/釋放信號(hào)量。參數(shù)
semid:信號(hào)量標(biāo)識(shí)。
sops::信號(hào)量數(shù)組。
nsops:信號(hào)量數(shù)量。返回值 成功返回0,失敗返回-1。semop函數(shù)(續(xù))struct
sembuf{ushort
sem_num; //在信號(hào)量數(shù)組中的索引shortsem_op; //操作類型shortsem_flg; //操作標(biāo)志};sembuf結(jié)構(gòu)中成員變量sem_op描述信號(hào)量的操作類型參數(shù)sem_op含義sem_op>0指定信號(hào)量與sem_op相加,釋放更多的信號(hào)量,喚醒正在等待該信號(hào)量的進(jìn)程/線程sem_op=0等待指定信號(hào)量變?yōu)?sem_op<0指定信號(hào)量與sem_op相加,若值大于等于0,表示獲得信號(hào)量,否則等待semctl函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>函數(shù)原型
int
semctl(int
semid,int
semnum,int
cmd,...);功能 信號(hào)量的控制操作。參數(shù)
semid:信號(hào)量標(biāo)識(shí)。
semnum:在信號(hào)量集中的索引。
cmd:操作類型。返回值 成功返回值由具體操作決定,失敗返回-1。semctl函數(shù)(續(xù))unionsemun{
int
val;//用于設(shè)置信號(hào)量的值
struct
semid_ds*buf;//緩存地址,用于IPC_STAT和IPC_SETunsignedshort*array;//數(shù)組地址,用于GETALL和SETALL
struct
seminfo*__buf;//緩存地址,用于IPC_INFO};參數(shù)cmd含義GETVAL獲得信號(hào)量的值SETVAL設(shè)置信號(hào)量的值GETPID獲得最后一次操作信號(hào)量的進(jìn)程GETNCNT獲得正在等待信號(hào)量的進(jìn)程數(shù)GETZCNT獲得等待信號(hào)量值變?yōu)?的進(jìn)程數(shù)IPC_RMID刪除信號(hào)量集,喚醒所有等待的進(jìn)程/線程3SystemV消息隊(duì)列
消息隊(duì)列是存在于內(nèi)核中的消息列表,一個(gè)進(jìn)程可將消息發(fā)送至消息隊(duì)列,另一個(gè)進(jìn)程則可從消息隊(duì)列中獲取消息。棧堆數(shù)據(jù)代碼棧堆數(shù)據(jù)代碼進(jìn)程1進(jìn)程2消息隊(duì)列Linux內(nèi)核Linux內(nèi)核SystemV消息隊(duì)列的操作步驟(1)建/打開SystemV消息隊(duì)列。(2)接收/發(fā)送SystemV消息。(3)當(dāng)SystemV消息隊(duì)列不再使用時(shí),將其刪除。msgget函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h>函數(shù)原型
int
msgget(key_tkey,int
msgflg);功能 創(chuàng)建/打開SystemV消息隊(duì)列參數(shù)
key:IPC對(duì)象標(biāo)識(shí)。
msgflg:存取權(quán)限和操作方式。返回值 成功返回消息隊(duì)列標(biāo)識(shí),失敗返回-1。msgrcv/msgsnd函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h>函數(shù)原型
ssize_t
msgrcv(int
msqid,void*msgp,size_t
msgsz,long
msgtyp,int
msgflg);
int
msgsnd(int
msqid,constvoid*msgp,size_t
msgsz,int
msgflg);功能接收/發(fā)送SystemV消息。參數(shù)
msqid:消息隊(duì)列的標(biāo)識(shí)。
msgp:消息地址。
msgsz:消息大小(字節(jié)數(shù))。
msgtyp:接收消息類型。
msgflg:操作方式。返回值 成功返回0,失敗返回-1。struct
msgbuf{longmtype;//消息類型,必須大于0charmtext[1];//消息,具體結(jié)構(gòu)用戶可自定義};msgctl函數(shù)頭文件
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h>函數(shù)原型
int
msgctl(int
msqid,int
cmd,struct
msqid_ds*buf);功能控制SystemV消息隊(duì)列的屬性。參數(shù)
msqid:消息隊(duì)列標(biāo)識(shí)。
cmd:操作類型。
buf:指向操作的數(shù)據(jù)。返回值 成功返回0,失敗返回-1。msgctl函數(shù)struct
msqid_ds{
struct
ipc_perm
msg_perm;
struct
msg*msg_first; //指向消息隊(duì)列的首
struct
msg*msg_last; //指向消息隊(duì)列的尾
__kernel_time_t
msg_stime; //最后發(fā)送時(shí)間
__kernel_time_t
msg_rtime; //最后接收時(shí)間
__kernel_time_t
msg_ctime; //最后修改時(shí)間
unsignedshortmsg_cbytes; //當(dāng)前消息隊(duì)列的字節(jié)數(shù)
unsignedshortmsg_qnum; //消息隊(duì)列中的消息數(shù)
unsignedshortmsg_qbytes; //消息隊(duì)列的最大字節(jié)數(shù)
__kernel_ipc_pid_t
msg_lspid; //最后發(fā)送消息的進(jìn)程ID__kernel_ipc_pid_t
msg_lrpid; //最后接收消息的進(jìn)程ID};參數(shù)cmd含義IPC_RMID刪除消息隊(duì)列IPC_STAT獲取消息隊(duì)列的狀態(tài)IPC_SET改變消息隊(duì)列的存取權(quán)限struct
ipc_perm{
key_tkey; //IPC對(duì)象標(biāo)識(shí)
uid_t
uid; //用戶ID
gid_t
gid; //用戶組ID
uid_t
cuid; //創(chuàng)建用戶ID
gid_t
cgid; //創(chuàng)建用戶組IDunsignedshortmode; //權(quán)限分配
unsignedshortseq; //序列號(hào)};SystemV共享內(nèi)存
將同時(shí)映射至不同進(jìn)程用戶空幻的物理內(nèi)存稱為共享內(nèi)存,物理內(nèi)存可由若干不連續(xù)的物理頁(yè)構(gòu)成,共享內(nèi)存在不同進(jìn)程用戶空間的地址未必相同。內(nèi)核棧堆數(shù)據(jù)代碼內(nèi)核棧堆數(shù)據(jù)代碼進(jìn)程1進(jìn)程2物理內(nèi)存映射映射1.SYSTEMV共享內(nèi)存的操作步驟(1)創(chuàng)建/打開SystemV共享內(nèi)存。(2)將SystemV共享內(nèi)存映射至調(diào)用者進(jìn)程的用戶空間。(3)當(dāng)SystemV共享內(nèi)存不再使用時(shí),將映射接觸。shmget函數(shù)頭文件
#include<sys/ipc.h> #include<sys/shm.h>函數(shù)原型
int
shmget(key_tkey,intsize,int
shmflg);功能 創(chuàng)建/獲得systemv共享內(nèi)存。參數(shù)
Key:共享內(nèi)存標(biāo)識(shí)。
size:共享內(nèi)存大小。
shmflg存取權(quán)限和操作方式。返回值 成功返回消息隊(duì)列標(biāo)識(shí),失敗返回-1。shmat/shmdt函數(shù)
頭文件
#include<sys/types.h> #include<sys/shm.h>函數(shù)原型
void*shmat(int
shmid,constvoid*shmaddr,int
shmflg);
int
shmdt(constvoid*shmaddr);功能 建立/解除SystemV共享內(nèi)存的內(nèi)存映射。參數(shù)
shmid:IPC對(duì)象標(biāo)識(shí)。
shmaddr:映射地址。
shmflg:權(quán)限和操作方式。返回值 成功返回映射的地址,失敗返回-1。shmctl函數(shù)頭文件
#include<sys/types.h> #include<sys/shm.h>函數(shù)原型
int
shmctl(int
shmid,int
cmd,struct
shmid_ds*buf);功能 操作systemv共享內(nèi)存。參數(shù)
shmid:IPC對(duì)象標(biāo)識(shí)。
cmd:操作命令。
buf:共享內(nèi)存屬性地址。返回值 成功返回0,失敗返回-1。shmctl函數(shù)struct
shmid_ds{
struct
ipc_perm
shm_perm; //存取權(quán)限
int
shm_segsz; //共享內(nèi)存大小
__kernel_time_t
shm_atime; //最后映射時(shí)間
__kernel_time_t
shm_dtime; //最后解除映射時(shí)間
__kernel_time_t
shm_ctime; //最后修改時(shí)間
__kernel_ipc_pid_t
shm_cpid; //創(chuàng)建進(jìn)程ID__kernel_ipc_pid_t
shm_lpid; //最近操作進(jìn)程IDunsignedshort shm_nattch; //建立映射的進(jìn)程數(shù)};參數(shù)cmd描述IPC_STAT獲取共享內(nèi)存的狀態(tài)IPC_SET設(shè)置共享內(nèi)存的權(quán)限IPC_RMID刪除共享內(nèi)存IPC_LOCK鎖定共享內(nèi)存,使共享內(nèi)存不被交換出去IPC_UNLOCK解鎖共享內(nèi)存9.5POSIXIPC內(nèi)容提要POSIXIPC概述POSIX信號(hào)量
POSIX消息隊(duì)列POSIX共享內(nèi)存POSIXIPC概述
為了消除各類Unix間的差異,POSIX設(shè)計(jì)了一套具有更高可移植性的IPC接口標(biāo)準(zhǔn),相較于SystemVIPC,POSIXIPC語(yǔ)法較為簡(jiǎn)潔,它同樣支持信號(hào)量、消息隊(duì)列和共享內(nèi)存。在較新的Linux內(nèi)核中實(shí)現(xiàn)了對(duì)POSIXIPC的支持。POSIX信號(hào)量POSIX信號(hào)量是一種進(jìn)程間同步的控制機(jī)制,信號(hào)量用整數(shù)表示,通常代表某種資源的數(shù)量。進(jìn)程通過減操作申請(qǐng)獲得信號(hào)量,通過加操作申請(qǐng)釋放信號(hào)量,當(dāng)信號(hào)量值為0時(shí),試圖獲取信號(hào)量的進(jìn)程掛起,直至其他進(jìn)程釋放信號(hào)量;反之,當(dāng)信號(hào)量已達(dá)上限,試圖釋放信號(hào)量的進(jìn)程掛起,直至其他進(jìn)程獲取了信號(hào)量。POSIX信號(hào)量的分類POSI命名信號(hào)量在Linux系統(tǒng)中,命名信號(hào)量存儲(chǔ)于文件系統(tǒng)tmpfs,tmpfs通常掛載至/dev/shm,當(dāng)創(chuàng)建一個(gè)新POSIX命名信號(hào)量時(shí),同名文件會(huì)出現(xiàn)在/dev/shm目錄。2.POSIX無名信號(hào)量POSIX無名信號(hào)量在文件系統(tǒng)上無對(duì)應(yīng)的文件,如同無名管道一樣,可用于父子進(jìn)程及其線程間的同步控制。POSIX信號(hào)量的操作步驟1.創(chuàng)建/打開POSIX信號(hào)量。1.申請(qǐng)/釋放POSIX信號(hào)量。3.當(dāng)完成對(duì)信號(hào)量的操作,及時(shí)關(guān)閉信號(hào)量。4.當(dāng)所有進(jìn)程都關(guān)閉了信號(hào)量,將信號(hào)量刪除。創(chuàng)建/打開/關(guān)閉/刪除POSIX命名信號(hào)量。(1)sem_open/sem_close/sem_unlink函數(shù)頭文件
#include<fcntl.h> #include<sys/stat.h> #include<semaphore.h>函數(shù)原型
sem_t*sem_open(constchar*name,int
oflag);
sem_t*sem_open(constchar*name,int
oflag,mode_tmode,unsignedintvalue);
int
sem_close(sem_t*sem);
int
sem_unlink(constchar*name);功能 創(chuàng)建/打開/關(guān)閉/刪除POSIX命名信號(hào)量。參數(shù)
name:信號(hào)量名稱。
oflag:操作方式。
mode:權(quán)限設(shè)置。
value:信號(hào)量初始值。返回值
sem_open函數(shù)成功返回信號(hào)量地址,失敗返回SEM_FAILED。申請(qǐng)/釋放POSIX信號(hào)量(2)sem_wait/sem_post函數(shù)頭文件
#include<semaphore.h>函數(shù)原型
int
sem_wait(sem_t*sem);
int
sem_timedwait(sem_t*sem,conststruct
timespec*abs_timeout);
int
sem_post(sem_t*sem);功能 申請(qǐng)獲取/釋放POSIX信號(hào)量。參數(shù)
sem:信號(hào)量對(duì)象。
abs_timeout:超時(shí)時(shí)間。返回值 成功,返回0,失敗,返回-1。初始化/注銷POSIX無名信號(hào)量(3)sem_init/sem_destroy函數(shù)頭文件
#include<semaphore.h>函數(shù)原型
int
sem_init(sem_t*sem,int
pshared,unsignedintvalue)
int
sem_destroy(sem_t*sem)功能 初始化/注銷POSIX無名信號(hào)量。參數(shù)
sem:信號(hào)量。
pshared:共享標(biāo)志。
value:信號(hào)量的初始值。返回值 成功,返回0,否則,返回-1。POSIX無名信號(hào)量在文件系統(tǒng)上無對(duì)應(yīng)的文件,如同無名管道一樣,基于內(nèi)存實(shí)現(xiàn),可用于父子進(jìn)程及其線程間的同步控制。POSIX消息隊(duì)列POSIX消息隊(duì)列是一種進(jìn)程間以消息為單位的數(shù)據(jù)傳輸機(jī)制,消息以隊(duì)列形式儲(chǔ)存,并為消息定義優(yōu)先級(jí),優(yōu)先級(jí)高的消息會(huì)被優(yōu)先處理。POSIX消息隊(duì)列的實(shí)現(xiàn)在Linux系統(tǒng)中,POSIX消息隊(duì)列存儲(chǔ)于mqueue文件系統(tǒng),若將mqueue文件系統(tǒng)掛載至/dev/mqueue目錄,新建的消息隊(duì)列會(huì)在/dev/mqueue生成相應(yīng)的文件.POSIX消息隊(duì)列的操作步驟1.創(chuàng)建/打開一個(gè)POSIX消息隊(duì)列。2.接收/發(fā)送消息。3.當(dāng)完成對(duì)消息隊(duì)列的操作,應(yīng)及時(shí)關(guān)閉消息隊(duì)列。4.當(dāng)所有進(jìn)程不再使用消息隊(duì)列時(shí),應(yīng)將消息隊(duì)列刪除。創(chuàng)建/打開/關(guān)閉/刪除POSIX消息隊(duì)列(1)mq_open/mq_close/mq_unlink函數(shù)頭文件
#include<fcntl.h> #include<sys/stat.h> #include<mqueue.h>函數(shù)原型
mqd_t
mq_open(constchar*name,int
oflag);
mqd_t
mq_open(constchar*name,int
oflag,mode_t
mode,struct
mq_attr*attr);
int
mq_close(mqd_t
mqdes);
int
mq_unlink(constchar*name);功能 創(chuàng)建/打開/關(guān)閉/刪除POSIX消息隊(duì)列。參數(shù)
name:POSIX消息隊(duì)列名稱。
oflag:操作方式。
mode:訪問權(quán)限。
attr:屬性地址。返回值
mq_open函數(shù)成功返回消息隊(duì)列描述符,失敗返回-1。struct
mq_attr{longmq_flags;//收發(fā)信息是否阻塞,取值為0或O_NONBLOCKlongmq_maxmsg;//發(fā)送消息數(shù)量上限
longmq_msgsize;//每條消息的最大上限
longmq_curmsgs;//當(dāng)前消息的數(shù)量};獲取/設(shè)置POSIX消息隊(duì)列屬性(2)mq_getattr/mq_setattr函數(shù)頭文件
#include<mqueue.h>函數(shù)原型
int
mq_getattr(mqd_t
mqdes,struct
mq_attr*attr);
int
mq_setattr(mqd_t
mqdes,conststruct
mq_attr*newattr,struct
mq_attr*oldattr);功能 獲取/設(shè)置POSIX消息隊(duì)列屬性。參數(shù)
mqdes:消息隊(duì)列描述符。
attr:屬性地址。
newattr:新屬性地址。
oldattr:原屬性地址。返回值 成功返回0,失敗返回-1。接收/發(fā)送消息(3)mq_receive/mq_send函數(shù)頭文件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)虛擬現(xiàn)實(shí)VR行業(yè)營(yíng)銷創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)指紋識(shí)別芯片行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)玩具行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)酒店行業(yè)開拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2024年汽車智能座艙投融資研究白皮書
- 織物強(qiáng)力標(biāo)準(zhǔn)
- 關(guān)于“臥室裝飾燈”的調(diào)研問卷
- 福建省2024屆高三下學(xué)期6月模擬英語(yǔ)試題
- 收購(gòu)某供水特許經(jīng)營(yíng)項(xiàng)目SPV公司股權(quán)項(xiàng)目可行性研究報(bào)告
- 甲流防控知識(shí)培訓(xùn)課件
- 嶺南師范學(xué)院《高等代數(shù)Ⅰ》2021-2022學(xué)年第一學(xué)期期末試卷
- 倉(cāng)庫(kù)負(fù)責(zé)人年終總結(jié)
- 安全環(huán)保職業(yè)健康法律法規(guī)清單2024年
- 語(yǔ)文版2024年六年級(jí)上冊(cè)語(yǔ)文文言文閱讀理解真題
- 公職人員入股經(jīng)商檢討書
- 2024年廣州市個(gè)人房屋租賃合同
- PDCA提高便秘患者腸鏡檢查腸道準(zhǔn)備合格率
- 蘇教版四年級(jí)上冊(cè)數(shù)學(xué)計(jì)算題大全1000道帶答案
- SLT 478-2021 水利數(shù)據(jù)庫(kù)表結(jié)構(gòu)及標(biāo)識(shí)符編制總則
- 【新教材】人教版(2024)七年級(jí)上冊(cè)英語(yǔ)Unit 6 A Day in the Life單元整體教學(xué)設(shè)計(jì)(4課時(shí))
- 云倉(cāng)存儲(chǔ)合同范本
評(píng)論
0/150
提交評(píng)論