linux下C語言編程4-使用共用記憶體實現處理序間通訊

來源:互聯網
上載者:User

共用記憶體的函數有以下幾個:

(1)int shmget(key_t key, int size, int shmflg),開闢或使用一塊共用記憶體。

(2)void *shmat(int shmid, const void *shmaddr, int shmflg), 將參數shmid所指向的共用記憶體與當前進程串連。

當使用某共用記憶體時,需要先使用shmat,達成串連。

(3)int shmdt(const void *shmaddr),將先前用shmat串連的共用記憶體與當前進程解除串連。參數shmaddr為shmat返回的共用記憶體的地址。

在完成對共用記憶體的使用後,需要使用shmdt解除串連。

(4)int shmctl(int shmid, int cmd, struct shmid_ds *buf),控制記憶體的操作。當cmd為IPC_RMID時,刪除shmid所指的共用記憶體。

這些函數的表標頭檔為<sys/ipc.h>和<sys/shm.h>,其詳細參數請去網上搜尋。

下面給出一個使用共用記憶體實現處理序間通訊的例子:進程A開闢一塊新的共用記憶體,進程B修改這個共用記憶體,進程C列印輸出這個共用記憶體的內容,進程D刪除這個共用記憶體。

進程BCD啟動並執行命令格式為:命令 共用記憶體ID,如./output 123432。

進程A代碼如下:

int main(){int shmid;shmid = shmget(IPC_PRIVATE, SIZE, IPC_CREAT | 0600);if (shmid < 0){perror("shmget error");exit(1);}printf("create shared memory OK. shmid=%d/n", shmid);return 0;}

進程B代碼如下:

int main(int argc, char *argv[]){int shmid;char *shmaddr;if (argc != 2){perror("argc error/n");exit(1);}shmid = atoi(argv[1]);shmaddr = (char *)shmat(shmid, NULL, 0);if ((int )shmaddr == -1){perror("shmat error./n");exit(1);}strcpy(shmaddr, "hello, world!");shmdt(shmaddr);return 0;}

進程C代碼如下:

int main(int argc, char *argv[]){int shmid;char *shmaddr;if (argc != 2){printf("argc error/n");exit(1);}shmid = atoi(argv[1]);shmaddr = (char *)shmat(shmid, NULL, 0);if ((int )shmaddr == -1){perror("shmat error./n");exit(1);}printf("%s/n", shmaddr);shmdt(shmaddr);return 0;}

進程D代碼如下:

int main(int argc, char *argv[]){int shmid;if (argc != 2){perror("argc error/n");exit(1);}shmid = atoi(argv[1]);shmctl(shmid, IPC_RMID, NULL);return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.