기존의 공유 메모리를 첨부 1 (C 코드) 메신저과 같은 공유 메모리를 생성 :이 SharedMemory응용 프로그램에서 QSharedMemory
const char* native_key = "/tmp/shmem";
key_t ft_key = ftok(native_key, 1);
key = QString::number(ft_key);
QSharedMemory shmem(key);
if(!shmem.attach()) {
qDebug() << "attach failed" << shmem.errorString() << shmem.key() << shmem.nativeKey() << endl;
}
에게 액세스하려는 응용 프로그램 2 (QT)에서,691,363 :"16858191" "/ tmp를/qipc_sharedmemory_24384b85e5d54b23bd4f84f14de71b10d4801666"char * key_path = "/tmp/shmem"; int file = open(key_path, O_CREAT | O_RDWR | O_APPEND, 0755); close(file); key_t key = ftok(key_path, 1); shmid = shmget (key, SHM_DATASIZE , IPC_CREAT | SHM_R | SHM_W); shmdata = shmat(shmid, NULL, 0);shmid);
은 "존재하지 않는 QSharedMemory는 :: (하는 shmget)를 연결"실패 첨부 할 (210)
그래서 내가 해봤 다음
const char* native_key = "/tmp/shmem";
key_t ft_key = ftok(native_key, 1);
key = QString::number(ft_key);
QSharedMemory shmem(key);
shmem.setNativeKey(native_key);
if(!shmem.attach()) {
qDebug() << "attach failed" << shmem.errorString() << shmem.key() << shmem.nativeKey() << endl;
}
는 "QSharedMemory는 :: (하는 shmget) 첨부 : 존재하지 않는"실패 첨부 할 "" "/ tmp를/shmem_prot"
나는 문제가 unix_key가 설정되어 있지 않으므로 attach()의 shmget이 실패 할 것이라고 생각합니다. handle()은 private이므로이 함수를 호출하여 unix_key를 설정할 수 없습니다.
크기를 모르는 상태에서 공유 메모리에 액세스 할 수 있습니까/create()를 호출할까요?
내가 만들 호출 할()
QSharedMemory shmem(key);
shmem.create(SHM_DATASIZE);
새로운 공유 메모리가 만든 것입니다 ...
내가 무슨 일을하고 있는가? 미리 감사드립니다.
문제가 발생할 수 있다고 생각되는 2 가지가 있습니다. 하나, 당신이 그것으로 끝났을 때 당신은 메모리를 분리합니까? 둘째, 동시에 메모리에 대한 다중 액세스를 방지하기 위해 세마포어 신호를 사용합니까? 그리고 부착을 위해 당신이 그 영역의 크기를 필요로하는 것을 사용할 수있는 어떤 기능을 알지 못합니다.그러나 "어쩌면"첫 번째 크기를 유지하기 위해 정수 (또는 무언가) 하나만있는 다른 영역을 만들려고 할 수 있습니다. 나중에 부착 할 때 사용하십시오. 행운을 빌어 요 – koksalb
어떤 OS입니까? 'ipcs' 유틸리티를 가지고 있다고 가정하면,'ipcs -a'의 결과는 무엇입니까? 그러면 시스템의 모든 SysV 공유 메모리 세그먼트가 표시됩니다. –
@koksalb 공유 메모리가 성공적으로 연결되었을 때 분리 및 세마포어에 대해 이야기 할 수 있습니다. 하지만이 상태에서는 문제가되지 않습니다 .. – mvollmer