これは私と一緒にクリックしていないトピックの宿題なので、もっと詳しく解説されている説明を読んでいただければ幸いです。私の共有メモリの名前をパイプに書き込むことができません
私は、共有メモリの名前を指定してアクセスできるように、他の複数のプロセス用に共有メモリを作成しようとしています。私の他のプロセスはパイプを介して親プロセスに接続されています。パイプの作成後に共有メモリの名前をパイプに書きたいと思います。ここまでは私のコードです。私はprintステートメントには決してできません。
書き込みをコメントアウトすると、プログラムは1回動作します。しかし、プログラムをもう一度実行しようとすると、名前空間の名前を変更して機能させる必要があります。私はなぜそれが起こっているのか分かりません。私は理解していないこれらの機能の1つの特性があると確信しています。
int shm;
char *p;
shm = shm_open("Name", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
size_t len = 4 * 255;
if (ftruncate(shm, len) == -1) {
perror("Truncate");
return 1;
}
p = mmap(0, 4, PROT_WRITE, MAP_SHARED, shm, 0);
if (p == MAP_FAILED){
perror("mmap");
return 1;
}
write(fd[1], "Name", 30);
printf("Initiator: Shared memory for Consonanats is %d.\n", shm);
オープンされているリソースは、終了すると終了する必要があります。共有メモリを 'shm_close'する必要があります。これにより、プログラムを再実行するたびに名前空間を変更する必要がなくなります。 – Hypino
共有メモリセグメントの名前は、スラッシュ( '/')で始まる必要があります。 –
@Hypino、 "shm_unlink'のスペルが間違っているようです。 'shm_open()'の標準的なものではなく、少なくともshm_close()はありません。 –