親プロセスにMAP_SHARED
とMAP_ANONYMOUS
フラグを指定することで、mmap()
共有メモリ領域と匿名メモリ領域にすることができます。そのメモリは、そのプロセスとその子にのみアクセス可能です。メモリセグメントが匿名であるため、他のプロセスだけでアクセスが/それをマッピングしてみましょう、それを参照することができなくなります。
void *shared_mem = mmap(NULL, n_bytes, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
親プロセスはmmap()
を使用して共有メモリ・セグメントを作成する必要があります。そのメモリセグメントは、fork()
によって作成された子プロセスによって継承されます。子プロセスは、単純にそのメモリ・セグメントを参照するために親から継承shared_mem
ポインタを使用することができます
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
void *shared_mem = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
pid_t pid = fork();
if (pid > 0) {
// parent
// use shared_mem here
} else if (pid == 0) {
// child
// use shared_mem here
} else {
// error
}
return 0;
}
は、一般的に、暗号化は大丈夫だと思うが..しかし、私は(ファイルから)最初でデータを暗号化していると、ファイルが非常に大きいです。 。そしてクリーンなデータを読みたい複数のプロセスがあるので、私は共有メモリにデータを解読したかったのです。 –