2014-03-25 2 views
1

응용 프로그램의 한 인스턴스가 구조를 만들고 mmap 또는 shm과 같은 공유 메모리에 저장하고 다른 인스턴스가 데이터를 공유하는 프로그램을 만들고 싶습니다.문자열 데이터 형식을 공유 메모리에 저장하는 방법은 무엇입니까?

내가 겪고있는 문제 중 하나는 "공유 메모리에 문자열 데이터 형식을 쓰는 방법"입니다. 내 지식 문자열 클래스는 런타임에 메모리를 할당하므로 응용 프로그램 주소 공간에 저장됩니다. 나는 다른 프로세스와 공유하려는 구조 다음 한

... 내가이

struct Node 
{ 
    int id; 
    char description[20]; 
    struct Node* child[10]; 
    //some other data types 
}; 

같은 구조를 사용하고 있다면 프로세스간에 데이터를 공유 할 수 있어요

struct Node 
{ 
    int id; 
    string description; 
    struct Node* child[10]; 
    //some other data types 
}; 

그러나 나는 char 배열을 사용하고 싶지 않습니다. 아무도 가능한 해결책을 제안 할 수 있습니다 ...

+1

Boost.IPC의 공유 메모리 할당자를 사용할 수 있습니다. –

+0

감사합니다. @KerrekSB, Boost 라이브러리를 확인하겠습니다. – rajenpandit

+0

char 배열을 사용하면 해결할 수 있다고 생각하지만 사용하고 싶지 않다고 답한 것이 아닙니다. 최대 길이를 제공해야하지만 가능하면 std :: string으로 작업 할 수있는 인터페이스를 만들 수 있습니다. – stefaanv

답변

0

문자열의 경우 다음과 같이 저장할 수 있습니다 : 하나의 공유 메모리는 고정 크기 멤버를 저장합니다. struct 노드 { int id; char * desc_address; int desc_size; struct Node * child_address; int child_size; // 일부 다른 데이터 형식 };

다른 공유 메모리는 동적 크기 값을 저장합니다 : 그래서 desc_address와 child_address는 다른 Shared_Memory를 가리킬 수 있습니다.

여기 전략 사용 : 동적 분할 및 고정.