Linux系統程式設計之程式間通訊方式:共享記憶體例項演示
實戰示例
接下來我們做這麼一個例子:建立兩個程式,在 A 程式中建立一個共享記憶體,並向其寫入資料,透過 B 程式從共享記憶體中讀取資料。
寫端程式碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define BUFSZ 512
int main(int argc, char *argv[])
{
int shmid;
int ret;
key_t key;
char *shmadd;
//建立key值
key = ftok("../", 2015);
if(key == -1)
{
perror("ftok");
}
//建立共享記憶體
shmid = shmget(key, BUFSZ, IPC_CREAT|0666);
if(shmid < 0)
{
perror("shmget");
exit(-1);
}
//對映
shmadd = shmat(shmid, NULL, 0);
if(shmadd < 0)
{
perror("shmat");
_exit(-1);
}
//複製資料至共享記憶體區
printf("copy data to shared-memory\n");
bzero(shmadd, BUFSZ); // 共享記憶體清空
strcpy(shmadd, "how are you, lh\n");
return 0;
}
讀程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define BUFSZ 512
int main(int argc, char *argv[])
{
int shmid;
int ret;
key_t key;
char *shmadd;
//建立key值
key = ftok("../", 2015);
if(key == -1)
{
perror("ftok");
}
system("ipcs -m"); //檢視共享記憶體
//開啟共享記憶體
shmid = shmget(key, BUFSZ, IPC_CREAT|0666);
if(shmid < 0)
{
perror("shmget");
exit(-1);
}
//對映
shmadd = shmat(shmid, NULL, 0);
if(shmadd < 0)
{
perror("shmat");
exit(-1);
}
//讀共享記憶體區資料
printf("data = [%s]\n", shmadd);
//分離共享記憶體和當前程式
ret = shmdt(shmadd);
if(ret < 0)
{
perror("shmdt");
exit(1);
}
else
{
printf("deleted shared-memory\n");
}
//刪除共享記憶體
shmctl(shmid, IPC_RMID, NULL);
system("ipcs -m"); //檢視共享記憶體
return 0;
}
執行結果:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2657404/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux程式間通訊之共享記憶體Linux記憶體
- 程式間通訊之共享記憶體記憶體
- Linux 程式間通訊之System V 共享記憶體Linux記憶體
- linux程式間通訊-----System V共享記憶體總結例項Linux記憶體
- 程式間通訊---共享記憶體記憶體
- Linux程式間通訊——使用共享記憶體Linux記憶體
- Linux系統程式設計之程式間通訊方式:管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:管道(一)Linux程式設計
- Linux系統程式設計—共享記憶體之mmapLinux程式設計記憶體
- Linux系統程式設計之程式間通訊方式:訊息佇列Linux程式設計佇列
- linux程式間的通訊(C): 共享記憶體Linux記憶體
- Linux系統程式設計之程式間通訊方式:命名管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:命名管道(一)Linux程式設計
- Android native程式間通訊例項-binder結合共享記憶體Android記憶體
- Linux系統程式設計之命名管道與共享記憶體Linux程式設計記憶體
- 程式間的八種通訊方式----共享記憶體是最快的 IPC 方式記憶體
- LLinux系統程式設計(10)——程式間通訊之管道Linux程式設計
- 程序間通訊(3)-共享記憶體記憶體
- 程式間通訊——基於共享記憶體和訊號量實現共享佇列記憶體佇列
- php實現共享記憶體程式通訊函式之_shmPHP記憶體函式
- Linux系統程式設計(11)——程式間通訊之有名管道Linux程式設計
- (原創)[.Net] 程式間通訊框架(基於共享記憶體)——SimpleMMF框架記憶體
- 畫江湖之 PHP 多程式開發 【程式中如何通訊 共享記憶體】PHP記憶體
- 畫江湖之 PHP 多程式開發 [程式中如何通訊 共享記憶體]PHP記憶體
- linux程式間通訊-----管道總結例項Linux
- LINUX系統程式設計 LINUX 虛擬記憶體Linux程式設計記憶體
- Linux作業系統 程式之間的通訊Linux作業系統
- Linux 程式設計1:深入淺出 Linux 共享記憶體Linux程式設計記憶體
- “Linux程式設計”小結(程式間通訊)Linux程式設計
- 溫故之.NET程式間通訊——記憶體對映檔案記憶體
- 什麼是程式間通訊?Linux程式間通訊有幾種方式?Linux
- 程式間通訊是什麼?Linux程式間通訊有幾種方式?Linux
- 系統程式設計——管道通訊程式設計
- 作業系統程式之間的通訊作業系統
- Unix系統下程式間通訊方式及比較
- linux程式間通訊-----System V訊息佇列總結例項Linux佇列
- linux 程式間通訊之FIFOLinux
- linux 程式間通訊之管道Linux