日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

1. 消息隊列

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

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

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

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

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

#define KEY 1234 //消息隊列鍵值

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

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

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

(2)寫入消息

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

#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);

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

(3)讀取消息

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

struct msgbuf msg;

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

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

(4)刪除消息隊列

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

msgctl(msgqid, IPC_RMID, NULL);

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

2. 信號量

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

在Linux中,使用信號量的基本步驟如下:

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

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

#define KEY 1234

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

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

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

(2)初始化信號量

使用semctl()函數(shù)來初始化信號量。

#include

union semun {

int val; //信號量值

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); //初始化信號量中的之一個信號量為1

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

(3)P操作和V操作

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

struct sembuf sembuf;

sembuf.sem_num = 0; //信號量中的之一個信號量

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

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

semop(semid, &sembuf, 1);

sembuf.sem_num = 0;

sembuf.sem_op = 1;

sembuf.sem_ = SEM_UNDO;

semop(semid, &sembuf, 1);

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

(4)刪除信號量

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

semctl(semid, 0, IPC_RMID);

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

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

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

給你發(fā)個例程,一起復(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)建一個消息隊列后,輸出消息隊列缺省屬性

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ā)送一個消息后,輸出消息隊列屬性

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);

//從消息隊列中讀出消息后,輸出消息隊列屬性

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;

//此處驗證超級用戶可以更改消息隊列的缺省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);

//驗證設(shè)置消息隊列屬性

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

if(reval==-1)

{

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

return;

}

}

void msg_stat(int msgid,struct msqid_ds msg_info)

{

int reval;

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

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);

//每個消息隊列的容量(字節(jié)數(shù))都有限制MSGMNB,值的大小因系統(tǒng)而異。在創(chuàng)建新的消息隊列時,肢耐//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ā)送過消息給進(jìn)程的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux 發(fā)送過消息給進(jìn)程,Linux如何通過消息傳遞機制向進(jìn)程發(fā)送信息,linux編程,進(jìn)程的通信的信息別忘了在本站進(jìn)行查找喔。

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


分享標(biāo)題:Linux如何通過消息傳遞機制向進(jìn)程發(fā)送信息(linux發(fā)送過消息給進(jìn)程)
標(biāo)題鏈接:http://www.dlmjj.cn/article/coisphi.html