共有メモリ例とLinuxプロセス

書き込み側:

#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を、00 ); 

    もし(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を、00 ); 

    もし(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 ; 
}

 

おすすめ

転載: www.cnblogs.com/nanfei/p/11797569.html