データ書き込み処理、データの読み出し処理
プロセスを書きます:
1.たshmget()は共有メモリを取得します。
プロセス空間にマップ2にshmat()は、共有メモリ
3.書き込みデータ
プロセスを読みます:
1.たshmget()は共有メモリを取得します。
プロセス空間にマップ2にshmat()は、共有メモリ
3.データの読み取り
4.にshmdt()は共有メモリ空間は、プロセスマップから解放されます
5. shmctl()共有メモリ削除する
読取処理を
// // 2020年2月10日にGXFによって作成されます。 // #ifndefのUNTITLED_MAIN_H の#define UNTITLED_MAIN_H のchar * ftokFilePath = "/Users/gxf/CLionProjects/untitled/main.c"。 int型PROJECT_ID = 10; typedefは構造体{ int型の年齢; 文字名[50]。 }人; #endifの// UNTITLED_MAIN_H
する#include <stdio.hに> する#include <SYS / ipc.h> の#include <SYS / shm.h> の#include <string.hの> の#include "main.h" int型のmain(){ key_tのftokRes = ftok(ftokFilePath 、PROJECT_ID)。 人* zhangsan。 人物リシ= {10、 "リシ"}。 int型shmidを=たshmget(ftokRes、はsizeof(人)、IPC_CREAT | 0777)。 printf( "shamidた:%d \ n"は、shmidを); zhangsan =(人*)にshmat(shmidを、NULL、SHM_W)。 zhangsan->年齢= 20; strcpyの(zhangsan->名、 "zhangsan1111"); 0を返します。 }
// // 2020年2月10日にGXFによって作成されます。 // する#include <stdlib.h>に含ま する#include <stdio.hに> する#include <sysの/ ipc.h> 書式#include <sysの/ shm.h> の#include <string.hの> の#include "main.h" int型メイン(){ key_tのftokRes = ftok(ftokFilePath、PROJECT_ID)。 printf( "%dの\ n"は、ftokRes)。 人* zhangsan =のmalloc(はsizeof(人)); int型shmidを=たshmget(ftokRes、はsizeof(人)、IPC_CREAT)。 人*は、shmaddr =にshmat(shmidを、NULL、SHM_R)。 memcpyを(zhangsan、は、shmaddr、はsizeof(人)); printf( "年齢:%dの、名:%sの\ n"は、zhangsan->年齢、zhangsan->名); INT RES =にshmdt(は、shmaddr)。 RES = shmctl(shmidを、IPC_RMID、NULL); もし(RES) fprintfの(stderrに、 "RM IPCS -m失敗"); 0を返します。 }