書き込み側:
#include <iostreamの> する#include <unistd.h> の#include <STDLIB.H> する#include <stdio.hに> する#include <SYS / shm.h> 使用して 名前空間STDを、 構造体MappingDataType { INT mappingData。 }。 BOOL SetUsedPID(文字列のMappingName) { ボイド * SHM = NULL; MappingDataType * 共有。 int型 shmidを=たshmget((key_tの)1234、はsizeof(MappingDataType)、0666 | IPC_CREAT)。 もし(shmidを== -1 ) { fprintfのは(stderrに、" たshmgetは、\ nを失敗しました" )。 返す 偽; } SHM =にshmat(shmidを、0、0 ); もし(SHM ==(ボイド *) - 1 ) { fprintfのは(stderrに、" にshmatは\ nを失敗" )。 返す 偽; } 共有 =(MappingDataType * )SHM。 共有 - > mappingData = :: GETPID()。 / * IF(にshmdt(SHM)== -1) { 関数fprintf(stderrに、 "にshmdtは失敗しました\ n"); falseを返します。 } (shmctl(shmidを、IPC_RMID、0)== -1)の場合 { 関数fprintf(stderrに、 "shmctl(IPC_RMID)が\ nを失敗")。 falseを返します。 } * / 戻る 真。 } int型のmain(int型 ARGC、CHAR * ARGV []) { BOOLの結果は= SetUsedPID(" ABC " )。 // 打断点、运行读取端 coutの<<結果<< てendl; リターン 0 ; }
最後を読みます
#include <iostreamの> する#include <unistd.h> の#include <STDLIB.H> する#include <stdio.hに> する#include <SYS / shm.h> 使用して 名前空間STDを、 構造体MappingDataType { INT mappingData。 }。 INT GetUsedPID(文字列のMappingName) { ボイド * SHM = NULL; MappingDataType * 共有。 int型 shmidを=たshmget((key_tの)1234、はsizeof(MappingDataType)、0666 | IPC_CREAT)。 もし - shmidを==(1) { fprintfのは(stderrに、" たshmgetは、\ nを失敗しました" )。 リターン 0 ; } SHM =にshmat(shmidを、0、0 ); もし(SHM ==(ボイド *) - 1 ) { fprintfのは(stderrに、" にshmatは\ nを失敗" )。 リターン 0 ; } 共有 =(構造体 MappingDataType * )SHM。 int型のpid = shared-> mappingData。 もし ==(にshmdt(SHM) -1 ) { fprintfのは(stderrに、" にshmdtは、\ nを失敗しました" )。 } であれば(shmctl(shmidを、IPC_RMID、0)== - 1 ) { 関数fprintf(stderrに、" shmctl(IPC_RMID)をN \失敗" )。 } 戻りPID。 } int型のmain(int型 ARGC、チャー *のARGV []) { int型 PID = GetUsedPID(" ABC " )。 coutの << PID <<てendl; //<=================ブレークポイントを置いて、ここで 返す 0 ; }