공유 메모리 예제 사이의 리눅스 프로세스

쓰기 측 :

사용법 #include <iostream> 
사용법 #include <unistd.h> 
#INCLUDE <stdlib.h> 
#INCLUDE <STDIO.H> 
#INCLUDE <SYS / shm.h>
 사용  스페이스 성병; 

구조체 MappingDataType {
     INT mappingData; 
}; 

불리언 SetUsedPID ( 문자열 된 MappingName) 
{ 
    공극 * SHM = NULL; 
    MappingDataType * 공유;
    INT shmid가 =하는 shmget ((된 key_t) 1234 , 는 sizeof (MappingDataType), 0666 | IPC_CREAT);
    경우 (shmid가 == -1 ) 
    { 
        fprintf와는 (표준 오류, " shmget 시스템은 \ n을 실패 " );
        돌아  거짓 ; 
    } 

    SHM =는 shmat (shmid가, 0 , 0 ); 

    경우 (SHM == ( 공극 *) - 1 ) 
    { 
        fprintf와는 (열려진, " 시 shmat는 \ n을 실패 " );
        돌아  거짓 ; 
    } 

    공유 = (MappingDataType의 * ) SHM 단계; 
    공유 -> mappingData = :: GETPID (); 

    / *  경우 (시, shmdt (SHM) == -1)
    { 
        fprintf와는 (표준 오류, "시, shmdt는 \ n을 실패"); 
        false를 반환; 
    } 

    경우 (설명 shmctl (shmid가, IPC_RMID, 0) == -1) 
    { 
        fprintf와는 (열려진 "설명 shmctl (IPC_RMID)는 \ n을 실패"); 
        false를 반환; 
    } * / 

    반환  사실 ; 
} 

INT 본체 ( 의 INT 는 argc,  *의 는 argv []) 
{ 
    부울 결과 = SetUsedPID ( " ABC " );
    // 打断点,运行读取端 
    COUT << 결과 << ENDL;
    반환  0 ; 
}

끝을보기 :

사용법 #include <iostream> 
사용법 #include <unistd.h> 
#INCLUDE <stdlib.h> 
#INCLUDE <STDIO.H> 
#INCLUDE <SYS / shm.h>
 사용  스페이스 성병; 

구조체 MappingDataType {
     INT mappingData; 
}; 

INT GetUsedPID ( 문자열 된 MappingName) 
{ 
    공극 * SHM = NULL; 
    MappingDataType * 공유; 

    INT shmid가 =하는 shmget ((된 key_t) 1234 , 는 sizeof (MappingDataType), 0666 | IPC_CREAT); 

    만약 - shmid가 == ( 1) 
    { 
        fprintf와는 (표준 오류, " shmget 시스템은 \ n을 실패 " );
        반환  0 ; 
    } 

    SHM =는 shmat (shmid가, 0 , 0 ); 

    경우 (SHM == ( 공극 *) - 1 ) 
    { 
        fprintf와는 (열려진, " 시 shmat는 \ n을 실패 " );
        반환  0 ; 
    } 

    공유 = ( 구조체 MappingDataType의 * ) SHM 단계;
    INT PID = shared-> mappingData; 
    
    경우 (시, shmdt (SHM) == -1 ) 
    { 
        fprintf와는 (표준 오류, " 시, shmdt는 \ n을 실패 " ); 
    } 

    경우 (설명 shmctl (shmid가, IPC_RMID는, 0 ) == - 1 ) 
    { 
        fprintf와는 (열려진, " 설명 shmctl (IPC_RMID)는 \ n을 실패 " ); 
    } 
    
    반환 PID; 
} 

INT 본체 ( 의 INT 는 argc,  *의 는 argv []) 
{ 
    INT PID = GetUsedPID ( " ABC " ); 

    COUT << PID << ENDL;    //<================= 중단 점을 넣고 여기 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/nanfei/p/11797569.html