LINUX系統(tǒng)編程之IPC(Inter Processes Communication)
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、桓臺網(wǎng)絡(luò)推廣、微信小程序開發(fā)、桓臺網(wǎng)絡(luò)營銷、桓臺企業(yè)策劃、桓臺品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供桓臺建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com一、信號
1.信號的產(chǎn)生
軟件中斷,異步通信,ctrl+c,kill函數(shù),kill命令,硬件異常(段錯誤),軟件異常
2.進(jìn)程收到信號后可以用如下方法處理:
執(zhí)行系統(tǒng)默認(rèn)動作(終止),忽略此信號,執(zhí)行自定義信號處理函數(shù)。
3.信號操作函數(shù)
kill(), alarm(), raise(), abort(), pause()
typedef void (*sighandler_t)(int);signal()
sigemptyset(), sigfillset(), sigismember(), sigdelset(), sigaddset()....
信號阻塞集:阻塞信號的接收sigprocmask();
二、管道/命名管道
1.無名管道:類似于一個文件,有2個文件描述符,只存在于內(nèi)存
半雙工,數(shù)據(jù)從寫端入,讀端出,先入先出,fd[0]輸出,fd[1]寫入
數(shù)據(jù)無格式要求,只固定大小,沒有名字,用fork和vfork會繼承其描述符
只有公共祖先進(jìn)程使用,如父進(jìn)程創(chuàng)建的管道只有該父進(jìn)程和其子進(jìn)程能訪問
int fd[2];
pipe(fd);
write();read();
close(fd);
read從管道中讀取數(shù)據(jù)時會阻塞,有數(shù)據(jù)就讀到返回,沒數(shù)據(jù)則等待,
write從管道寫數(shù)據(jù),寫滿阻塞,直到數(shù)據(jù)被讀出
如果讀進(jìn)程退出了,寫進(jìn)程寫數(shù)據(jù)時也會退出可用fcntl()設(shè)置阻塞特性
dup(old)復(fù)制old文件描述符并分配一個新的描述符,讀寫位置也會復(fù)制
dup2(old, new)復(fù)制文件描述符old,分配新的文件描述符new, new也標(biāo)識old所標(biāo)識的文件
常用如重定向0,1,2描述符
int fd_stdout=dup(1);復(fù)制stdout描述符1
dup2(fd_stdout, 1);將描述符1重新分配給stdout
2.命名管道FIFO
有名字,存在于文件系統(tǒng),內(nèi)容只存在于內(nèi)存
不相關(guān)的進(jìn)程也能使用
命名管道復(fù)制后會變成普通文件
mkfifo("./cmd_fifo", 0777);
open("./cmd_fifo", O_RDWR);
write();read();
close();
3.消息隊列
由內(nèi)核維護(hù)的鏈表,消息有格式(結(jié)構(gòu)體),消息有類型,可按照類型隨機(jī)查詢
有標(biāo)識符,只有內(nèi)核重啟或人工刪除才能刪除
結(jié)構(gòu)體第一個成員代表消息類型必須是long型變量,其它自行定義
發(fā)送消息msgsent(msqid, &msg, sizeof(msg)-4, 0);
接收消息msgrcv(msqid, &msg, sizeof(msg)-4, type, 0);返回長度
控制msgctl(msgqid, IPC_RMID, NULL)
typedef struct _msg
{
long mtype;
char mtext[50];
}MSG;
MSG msg;
key=ftok(".", 2012)
msgqid = msgget(key, IPC_CREAT|0666);
if(msgqid==-1)
perror("msgget");
msgrcv(msgqid, &msg, sizeof(msg.mtext), 10, 0);
msgctl(msgqid, IPC_RMID, NULL);
查看消息隊列ipcs -q
刪除消息隊列ipcrm -q msgqid
4.共享內(nèi)存
多個進(jìn)程共享給定的存儲空間
最快的通信方式,訪問互斥
查看ipcs -m
刪除ipcrm -m shmid
創(chuàng)建或打開int shmid = shmget(key, size, flag);
內(nèi)存映射shmat()
解除映射shmdt()
控制shmctl()
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。