日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux如何通過(guò)消息傳遞機(jī)制向進(jìn)程發(fā)送信息(linux發(fā)送過(guò)消息給進(jìn)程)

在Linux操作系統(tǒng)中,消息傳遞機(jī)制是進(jìn)程之間進(jìn)行通信的一種方式。它可以使不同進(jìn)程之間在各自的地址空間中進(jìn)行通信,相互之間不會(huì)干擾,從而提高了系統(tǒng)的安全性和可靠性。本文將介紹。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出鄭州免費(fèi)做網(wǎng)站回饋大家。

1. 消息隊(duì)列

消息隊(duì)列是進(jìn)程之間通信的一種方式,是Linux內(nèi)核提供的一種數(shù)據(jù)結(jié)構(gòu)。消息隊(duì)列允許一個(gè)進(jìn)程往隊(duì)列中寫(xiě)入消息,而另一個(gè)進(jìn)程則可以從隊(duì)列中讀取這些消息。每個(gè)消息都有一個(gè)類型和一個(gè)數(shù)據(jù),進(jìn)程可以通過(guò)消息類型來(lái)選擇讀取哪些消息。

在Linux中,使用消息隊(duì)列的基本步驟如下:

(1)創(chuàng)建消息隊(duì)列

通過(guò)系統(tǒng)調(diào)用msgget()函數(shù)可以創(chuàng)建消息隊(duì)列。

#define IPC_CREATE 01000 //創(chuàng)建一個(gè)消息隊(duì)列

#define KEY 1234 //消息隊(duì)列鍵值

key_t key = ftok(“.”, KEY); //根據(jù)路徑名和鍵值創(chuàng)建一個(gè)key

int msgqid = msgget(key, IPC_CREAT|0666);

上述代碼使用ftok()函數(shù)根據(jù)當(dāng)前路徑和一個(gè)唯一的鍵值生成一個(gè)key,然后使用msgget()函數(shù)創(chuàng)建消息隊(duì)列,并返回消息隊(duì)列的標(biāo)識(shí)符msgqid。IPC_CREAT表示如果不存在該消息隊(duì)列則創(chuàng)建它。

(2)寫(xiě)入消息

通過(guò)將消息結(jié)構(gòu)體msgbuf發(fā)送到消息隊(duì)列中即可寫(xiě)入一條消息。

#include

struct msgbuf {

long mtype; //消息類型

char mtext[1024]; //消息文本

};

struct msgbuf msg;

msg.mtype = 1;

strcpy(msg.mtext, “This is a message”);

msgsnd(msgqid, &msg, strlen(msg.mtext), 0);

上述代碼中,首先定義了一個(gè)消息結(jié)構(gòu)體msgbuf,其中mtype表示消息的類型,mtext表示消息的內(nèi)容。然后將需要寫(xiě)入的消息賦值到msg中,使用msgsnd()函數(shù)將該消息寫(xiě)入到消息隊(duì)列中。

(3)讀取消息

通過(guò)調(diào)用msgrcv()函數(shù)來(lái)讀取消息。

struct msgbuf msg;

msgrcv(msgqid, &msg, 1024, 1, 0); //讀取消息隊(duì)列中等待的之一條類型為1的消息

上述代碼中,調(diào)用msgrcv()函數(shù)讀取消息隊(duì)列中類型為1的消息,將消息存儲(chǔ)在msg中。

(4)刪除消息隊(duì)列

消息隊(duì)列使用完后需要使用msgctl()函數(shù)進(jìn)行刪除。

msgctl(msgqid, IPC_RMID, NULL);

上述代碼中,調(diào)用msgctl()函數(shù)刪除消息隊(duì)列。IPC_RMID表示刪除指定的消息隊(duì)列。

2. 信號(hào)量

信號(hào)量是Linux內(nèi)核提供的另一種進(jìn)程間通信機(jī)制。它可以用于提供對(duì)臨界資源的互斥訪問(wèn),從而保證了多個(gè)進(jìn)程同時(shí)訪問(wèn)同一資源時(shí)的安全性。

在Linux中,使用信號(hào)量的基本步驟如下:

(1)創(chuàng)建信號(hào)量

使用semget()函數(shù)可以創(chuàng)建一個(gè)新的或者獲取一個(gè)已有的信號(hào)量。

#define KEY 1234

key_t key = ftok(“.”, KEY); //根據(jù)路徑名和鍵值創(chuàng)建一個(gè)key

int semid = semget(key, 1, IPC_CREAT|0666); //創(chuàng)建信號(hào)量

上述代碼中,使用ftok()函數(shù)根據(jù)當(dāng)前路徑和一個(gè)唯一的鍵值生成一個(gè)key,然后使用semget()函數(shù)創(chuàng)建信號(hào)量,并返回信號(hào)量的標(biāo)識(shí)符semid。

(2)初始化信號(hào)量

使用semctl()函數(shù)來(lái)初始化信號(hào)量。

#include

union semun {

int val; //信號(hào)量值

struct semid_ds *buf; //semid_ds結(jié)構(gòu)指針

unsigned short int *array; //數(shù)組指針

struct seminfo *__buf;

};

union semun semval;

semval.val = 1;

semctl(semid, 0, SETVAL, semval); //初始化信號(hào)量中的之一個(gè)信號(hào)量為1

上述代碼中,定義了一個(gè)semun結(jié)構(gòu)體,然后使用semctl()函數(shù)將信號(hào)量中的之一個(gè)信號(hào)量初始化為1。

(3)P操作和V操作

使用semop()函數(shù)進(jìn)行P(wt)操作和V(signal)操作。

struct sembuf sembuf;

sembuf.sem_num = 0; //信號(hào)量中的之一個(gè)信號(hào)量

sembuf.sem_op = -1; //執(zhí)行P操作

sembuf.sem_ = SEM_UNDO; //防止程序意外終止導(dǎo)致信號(hào)量未釋放

semop(semid, &sembuf, 1);

sembuf.sem_num = 0;

sembuf.sem_op = 1;

sembuf.sem_ = SEM_UNDO;

semop(semid, &sembuf, 1);

上述代碼中,先定義了一個(gè)sembuf結(jié)構(gòu)體,然后使用semop()函數(shù)對(duì)該信號(hào)量中的之一個(gè)信號(hào)量執(zhí)行P操作和V操作。

(4)刪除信號(hào)量

信號(hào)量使用完后需要使用semctl()函數(shù)進(jìn)行刪除。

semctl(semid, 0, IPC_RMID);

上述代碼中,調(diào)用semctl()函數(shù)刪除信號(hào)量。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

linux編程,進(jìn)程的通信

給你發(fā)個(gè)例程,一起復(fù)習(xí)一下:

#include

#include

#include

void msg_stat(int,struct msqid_ds );

main()

{

int gflags,sflags,rflags;

key_t key;

int msgid;

int reval;

struct msguf{

int mtype;

char mtext;

}msg_uf;

struct msgmbuf

{

int mtype;

char mtext;

}msg_rbuf;

struct msqid_ds msg_ginfo,msg_sinfo;

char* msgpath=”/unix/msgqueue”;

key=ftok(msgpath,’a’);

gflags=IPC_CREAT|IPC_EXCL;

msgid=msgget(key,gflags|00666);

if(msgid==-1)

{

printf(“msg create error\n”);

return;

}

//創(chuàng)建一個(gè)消息隊(duì)列后,輸出消息隊(duì)列缺省屬性

msg_stat(msgid,msg_ginfo);

sflags=IPC_NOWAIT;

msg_uf.mtype=10;

msg_uf.mtext=’歷掘春a’;

reval=msgsnd(msgid,&msg_uf,sizeof(msg_uf.mtext),sflags);

if(reval==-1)

{

printf(“message send error\n”);

}

//發(fā)送一個(gè)消息后,輸出消息隊(duì)列屬性

msg_stat(msgid,msg_ginfo);

rflags=IPC_NOWAIT|MSG_NOERROR;

reval=msgrcv(msgid,&msg_rbuf,4,10,rflags);

if(reval==-1)

printf(“read msg error\n”);

else

printf(“read from msg queue %d bytes\n”,reval);

//從消息隊(duì)列中讀出消息后,輸出消息隊(duì)列屬性

msg_stat(msgid,msg_ginfo);

msg_sinfo.msg_perm.uid=8;//just a try

msg_sinfo.msg_perm.gid=8;//

msg_sinfo.msg_qbytes=16388;

//此處驗(yàn)證超級(jí)用戶可以更改消息隊(duì)列的缺省msg_qbytes

//注意這里設(shè)置的值大于缺省值

reval=msgctl(msgid,IPC_SET,&msg_sinfo);

if(reval==-1)

{

printf(“msg set info error\n”);

return;

}

msg_stat(msgid,msg_ginfo);

//驗(yàn)證設(shè)置消息隊(duì)列屬性

reval=msgctl(msgid,IPC_RMID,NULL);//刪除消息隊(duì)列

if(reval==-1)

{

printf(“unlink msg queue error\n”);

return;

}

}

void msg_stat(int msgid,struct msqid_ds msg_info)

{

int reval;

sleep(1);//只是為了后面輸出時(shí)間的方便

reval=msgctl(msgid,IPC_STAT,&msg_info);

if(reval==-1)

{

printf(“get msg info error\n”);

return;

}

printf(“\散彎n”);

printf(“current number of bytes on queue is %d\n”,msg_info.msg_cbytes);

printf(“number of messages in queue is %d\n”,msg_info.msg_qnum);

printf(“max number of bytes on queue is %d\n”,msg_info.msg_qbytes);

//每個(gè)消息隊(duì)列的容量(字節(jié)數(shù))都有限制MSGMNB,值的大小因系統(tǒng)而異。在創(chuàng)建新的消息隊(duì)列時(shí),肢耐//msg_qbytes的缺省值就是MSGMNB

printf(“pid of last msgsnd is %d\n”,msg_info.msg_lspid);

printf(“pid of last msgrcv is %d\n”,msg_info.msg_lrpid);

printf(“l(fā)ast msgsnd time is %s”, ctime(&(msg_info.msg_stime)));

printf(“l(fā)ast msgrcv time is %s”, ctime(&(msg_info.msg_rtime)));

printf(“l(fā)ast change time is %s”, ctime(&(msg_info.msg_ctime)));

printf(“msg uid is %d\n”,msg_info.msg_perm.uid);

printf(“msg gid is %d\n”,msg_info.msg_perm.gid);

}

linux 發(fā)送過(guò)消息給進(jìn)程的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 發(fā)送過(guò)消息給進(jìn)程,Linux如何通過(guò)消息傳遞機(jī)制向進(jìn)程發(fā)送信息,linux編程,進(jìn)程的通信的信息別忘了在本站進(jìn)行查找喔。

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。


文章標(biāo)題:Linux如何通過(guò)消息傳遞機(jī)制向進(jìn)程發(fā)送信息(linux發(fā)送過(guò)消息給進(jìn)程)
瀏覽地址:http://m.5511xx.com/article/coisphi.html