av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Linux進程間通信方式:實現(xiàn)數(shù)據(jù)共享(linux進程通信方式)

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

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

一、管道通信(Pipes)

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

int pipefd[2];

if(pipe(pipefd)

{

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

return -1;

}

二、命名管道(Named Pipes)

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

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;

}

三、信號(Signals)

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

#include

void sig_handler(int signo)

{

if (signo == SIGINT)

{

printf(“recv SIGINT\n”);

}

}

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

{

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

signal(SIGINT, sig_handler);

while(1)

{

sleep(1);

}

return 0;

}

四、消息隊列(Message Queues)

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

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

{

//接收消息隊列

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)存是進程間最高效方式之一,它可以用來實現(xiàn)進程間大量數(shù)據(jù)的快速傳輸,因為它就是一個物理內(nèi)存區(qū)域,多個進程可以訪問它,操作系統(tǒng)會維護它的一致性,使用代碼如下:

#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元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


名稱欄目:Linux進程間通信方式:實現(xiàn)數(shù)據(jù)共享(linux進程通信方式)
URL標題:http://uogjgqi.cn/article/djciese.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流