誰かが(合理的に)null以外の2番目のパラメーターで関数shmat()を使用する例を提供できますか?
マニュアルには次のように書かれています。
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
shmat()関数は、共有メモリ識別子shmidに関連付けられた共有メモリセグメントを呼び出しプロセスのデータセグメントに接続します。セグメントは、次のいずれかの基準で指定されたアドレスに接続されます。
- がNULLポインターの場合
shmaddr
、セグメントは、システムによって選択された最初の使用可能なアドレスに接続されます。shmaddr
がNULLポインターではなく、(shmflg&SHM_RND)がゼロ以外の場合、セグメントは(shmaddr-(shmaddr%SHMLBA))で指定されたアドレスに接続されます。- がNULLポインターではなく、(shmflg&SHM_RND)が0の場合
shmaddr
、セグメントはshmaddrで指定されたアドレスに接続されます。
しかし、shmaddrをNULLに設定した以外でshmatを使用した例は見たことがありません。私のプロジェクトでは、プロセスがそれをメモリに接続してmalloc()
問題なく使用でき、別のプロセスがその共有メモリへのポインタを(shmidによって)取得し、メモリにアクセスしようとしたときにセグフォールトしました。