メモリ内に大量のデータを生成するCプログラムがあり、このデータの特定のセクションをメモリ内で共有して、別のプロセスがそのセクションに読み取りアクセスできるようにする必要があります。
私はmmap
これを行うために使用しようとしていますが、あまり成功していません。これが私のコードです:
//Code above generates a pointer to the memory section I need to share, named addr
if (infoBlock->memory_size == 1073741824) { //This is the data block I need to share
int err, fd;
fd = open("/tmp/testOutput", (0_RDWR | 0_CREAT), S_IWUSR);
if (fd < 0) {
perror("Couldn't create output file\n");
goto failedExit;
}
unsigned *p = mmap(addr, 1073741824, PROT_READ, (MAP_SHARED | MAP_FIXED), fd, 0);
if (!p) {perror("mmap failed"); goto failedExit; }
printf("p is now: %p\n", p); //This should point to the shared mapping
printf("%u\n", *p); //Try to print out some data from the mapping
}
プログラムを実行した後、ファイル/ tmp / testOutputがそこにあることがわかりますが、サイズは0です。技術的にはファイルではないため、これがメモリマッピングで正常なものかどうかはわかりません。また、私のプログラム内のすべての出力は同じメモリアドレスを指しています。
/ tmp / testOutputを参照して、/ proc / PID/maps内に存在するメモリマップも確認できます。
すべてが実行されているように見えますが、ポインターの逆参照に関しては、プログラムが終了します。これは、マッピングを間違って行ったためであり、ポインターが本来あるべきではないものを指しているためだと思います。
誰かが私が間違っていることを見つけたり、アドバイスを提供したりすることができれば、それは大いにありがたいです。
ありがとう!