Linux中處理序間通訊:共用記憶體

來源:互聯網
上載者:User


Linux中處理序間通訊:共用記憶體 Linux給我們提供了豐富的內部進程通訊機制,包括共用記憶體、記憶體對應檔、先入先出(FIFO)、介面(sockets)以及多種用於同步的標識。  www.2cto.com       一般來說,內部進程通訊(interprocess communication)也就是IPC,是指兩個或兩個以上進程以及兩個或者兩個以上線程之間進行通訊聯絡。每個IPC機制都有不同的強項或者弱點, 不過沒有一個IPC機制包含內建的同步方法。因此程式員不但需要自己在程式中實現同步,而且還需要為了利用IPC機制而自己開發通訊協定。 共用記憶體-----------------------------------------------------------    使用共用記憶體和使用malloc()來分配記憶體地區很相似。使用共用記憶體的方法是:    1 對一個進程/線程使用shmget()分配記憶體地區。    2 使用shmat()放置一個或多個進程/線程在共用記憶體中,也可以用shmctl()來擷取資訊或者控制共用地區。    3 使用shmdt()從共用地區中分離。    4 使用shmctl()解除配置空間     共用記憶體是Linux中最快速的IPC方法。它也是一個雙向過程,共用地區內的任何進程都可以讀寫記憶體。這個機制的不利方面是其同步和協議都不受程式員控制,必須確保將控制代碼傳遞給了子進程和線程。 常式-----------------------------------------------------------#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define PERM S_IRUSR|S_IWUSR int main(int argc, char **argv){    key_t shmid;    char   *p_addr, *c_addr;    pid_t pid;    if(argc != 2) {        fprintf(stderr, "Usage:%s/n/a", argv[0]);        exit(1);    }    if( (shmid = shmget(IPC_PRIVATE, 1024, PERM)) == -1 )   { //(1)        fprintf(stderr, "Create Share Memory Error:%s/n/a", strerror(errno));        exit(1);    }    pid = fork();    if(pid > 0) {        p_addr = shmat(shmid, 0, 0);        memset(p_addr, '/0', 1024);        strncpy(p_addr, argv[1], 1024);        wait(NULL);        exit(0);    }    else if (pid == 0){        sleep(1);        c_addr = shmat(shmid, 0, 0);        printf("Client get %s/n", c_addr);        exit(0);    }} (1)IPC_PRIVATE            保證使用唯一IDS_IRUSR | S_IWUSR      使目前使用者可以讀寫這個地區 運行-----------------------------------------------------------$ ./a.out zengxiaolongClient get zengxiaolong$ ./a.out zengxiaolong 後記:    進程通訊(IPC)是網路程式的基礎,在很多的網路程式當中會大量的使用進程通訊的概念和知識.其實進程通訊是一件非常複雜的事情,我在這裡只是簡單的介紹了一下.如果你想學習進程通訊的詳細知識,最好的辦法是自己不斷的寫程式和看線上手冊. 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.