Я хочу создать некоторый буфер в виртуальной памяти и использовать его физическую память в другом приложении.
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main ()
{
int segment_id;
char* shared_memory;
struct shmid_ds shmbuffer;
int segment_size;
const int shared_segment_size = 0x6400;
int key = 1234;
segment_id = shmget (key, shared_segment_size,
IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
shared_memory = (char*) shmat (segment_id, 0, 0);
printf ("shared memory attached at address %p\n", shared_memory);
segment_size = shmbuffer.shm_segsz;
printf ("segment size: %d\n", segment_size);
/* Write a string to the shared memory segment. */
sprintf (shared_memory,"%p" shared_memory);
while(1)){}
return 0;
}
В приведенном выше примере я создал буфер и начальный адрес этого буфера япередача в другое приложение, и я хочу использовать этот адрес в качестве начального адреса для другой функции в другом приложении.Пример.
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
using namespace std;
int main()
{
int shmid = shmget(1234,0x6400,PC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
char *str = (char*) shmat(shmid,(void*)0,0);
printf("Data read from memory: %s\n",str);
/// USE THIS str (address passed from previous application)
shmdt(str);
shmctl(shmid,IPC_RMID,NULL);
return 0;
}
Можно ли использовать адрес, который я передаю из общей памяти, в другом приложении (см. Выше)?
Я хочу преобразовать виртуальный адрес, который я получаю в приложении, из общего ресурса.приложение памяти переводит его в физическую память и использует.
Правильный ли этот подход?Любые выводы будут очень полезны.