日韩无码专区无码一级三级片|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)銷(xiāo)解決方案
Linux進(jìn)程間通信方式:實(shí)現(xiàn)數(shù)據(jù)共享(linux進(jìn)程通信方式)

linux進(jìn)程間通信是進(jìn)程間實(shí)現(xiàn)數(shù)據(jù)傳輸和數(shù)據(jù)共享的一種跨進(jìn)程間的接口,如果可以使用非標(biāo)準(zhǔn)方法實(shí)現(xiàn),就可以快速完成進(jìn)程間通信。Linux操作系統(tǒng)為進(jìn)程間提供了多種通信方式實(shí)現(xiàn)數(shù)據(jù)共享,主要包括管道通信(Pipes)、命名管道(Named Pipes)、信號(hào)(Signals)、消息隊(duì)列(Message Queues)、共享內(nèi)存(Shared Memory)和信號(hào)量(Semaphore)等。

成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)公司把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!

一、管道通信(Pipes)

管道通信是Linux中最基本的進(jìn)程間通信模型,它允許進(jìn)程之間兩個(gè)方向上數(shù)據(jù)傳輸,是半雙工的,而且只能在父子進(jìn)程間通信(即調(diào)用進(jìn)程和被調(diào)用進(jìn)程)。使用管道通信可以用下列代碼實(shí)現(xiàn):

int pipefd[2];

if(pipe(pipefd)

{

printf(“create pipe error!\n”);

return -1;

}

二、命名管道(Named Pipes)

命名管道使用文件系統(tǒng)來(lái)實(shí)現(xiàn),它可以實(shí)現(xiàn)不同進(jìn)程間的通信,改進(jìn)了管道的雙向的半雙工的通信模式,允許多個(gè)進(jìn)程讀寫(xiě)管道,可以實(shí)現(xiàn)全雙工的數(shù)據(jù)通信,但是它取決于系統(tǒng)調(diào)用現(xiàn)有的文件結(jié)構(gòu)來(lái)實(shí)現(xiàn),所以使用時(shí)也較為繁瑣,使用代碼如下:

int main()

{

int fd;

char * myfifo = “/tmp/myfifo”;

mkfifo(myfifo, 0666);

fd = open(myfifo, O_RDONLY);

read(fd, data_from_server, sizeof(data_from_server));

close(fd);

unlink(myfifo);

return 0;

}

三、信號(hào)(Signals)

信號(hào)是Linux操作系統(tǒng)中一種同步機(jī)制,可以在任何進(jìn)程間傳遞,用來(lái)喚醒目標(biāo)進(jìn)程,由于信號(hào)可能會(huì)被系統(tǒng)忽略或者阻止,所以信號(hào)只能用來(lái)傳遞一些小段的數(shù)據(jù),平時(shí)也比較少用到,使用代碼如下:

#include

void sig_handler(int signo)

{

if (signo == SIGINT)

{

printf(“recv SIGINT\n”);

}

}

int main(int argc, char *argv[])

{

//安裝信號(hào)處理函數(shù)

signal(SIGINT, sig_handler);

while(1)

{

sleep(1);

}

return 0;

}

四、消息隊(duì)列(Message Queues)

消息隊(duì)列是用來(lái)實(shí)現(xiàn)線程間或進(jìn)程間數(shù)據(jù)共享的重要手段,它主要用來(lái)在系統(tǒng)中傳遞小段的數(shù)據(jù),可以有效緩解進(jìn)程繁重的工作負(fù)荷,使用代碼如下:

#include

//消息緩沖區(qū)

struct msgbuf

{

long mtype;

char mtext[256];

};

int main()

{

int msgid;

int ret;

struct msgbuf buf;

msgid = msgget(0x1234, IPC_CREAT|0666);

if(msgid

{

printf(“msgget() error!\n”);

return -1;

}

while(1)

{

//接收消息隊(duì)列

ret = msgrcv(msgid, &buf, 256, 0, IPC_NOWAIT);

if(ret > 0)

{

printf(“receive:%s\n”, buf.mtext);

}

sleep(2);

}

return 0;

}

五、共享內(nèi)存(Shared Memory)

共享內(nèi)存是進(jìn)程間最高效方式之一,它可以用來(lái)實(shí)現(xiàn)進(jìn)程間大量數(shù)據(jù)的快速傳輸,因?yàn)樗褪且粋€(gè)物理內(nèi)存區(qū)域,多個(gè)進(jìn)程可以訪問(wèn)它,操作系統(tǒng)會(huì)維護(hù)它的一致性,使用代碼如下:

#include

int main()

{

int shmid;

void * shmaddr;

if((shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT))

{

perror(“shmget() error!\n”);

return -1;

}

if((shmaddr = shmat(shmid, 0, 0)) == (void *)-1)

{

perror(“shmat() error!\n”);

return -1;

}

//利用共享內(nèi)存完成數(shù)據(jù)傳遞

memcpy(shmaddr, data, 1024);

shmdt(shmaddr);

shmctl(shmid, IPC_RMID, 0);

return

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


新聞名稱:Linux進(jìn)程間通信方式:實(shí)現(xiàn)數(shù)據(jù)共享(linux進(jìn)程通信方式)
標(biāo)題路徑:http://www.5511xx.com/article/djciese.html