私はposix共有メモリとposix unnamed semaphoresを使ってpshared = 1のクライアントサーバアプリケーションを構築しました。セマフォは共有メモリ内に置かれます。プログラムは正常に動作しますが、ipcs -mまたはipcs -sと入力すると、作成した共有メモリセグメントやセマフォは表示されません。それはなぜそうですか?なぜいくつかのposix共有メモリセグメントとposixセマフォがipcsに見えない
/* Server main function for implementing client server program using Posix Shared Memory and Posix Unnamed Semaphores*/
#include "shm_sem.h"
int main(int argc,char ** argv)
{
int fd;
struct shmstruct *ptr;
shm_unlink(MYSHM); // delete shared memory segment, if it already exists
/* create shared memory, set its size, map it and close descriptor */
fd=shm_open(MYSHM,O_RDWR|O_CREAT|O_EXCL,0777);
ptr=mmap(NULL,sizeof(struct shmstruct),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
// truncate the size of shared memory to the size of shmstruct
ftruncate(fd,sizeof(struct shmstruct));
close(fd);
// initialize the semaphores in shared memory
sem_init(&ptr->client_mutex,1,1); // set client semaphore to 1
sem_init(&ptr->server_mutex,1,0); // set server semaphore to 0
for(;;)
{
serverPosixShmSem(ptr); // calling server
}
}
/* Server main function for implementing client server program using Posix Shared Memory and Posix Unnamed Semaphores*/
#include "shm_sem.h"
int main(int argc,char ** argv)
{
int fd;
struct shmstruct *ptr;
shm_unlink(MYSHM); // delete shared memory segment, if it already exists
/* create shared memory, set its size, map it and close descriptor */
fd=shm_open(MYSHM,O_RDWR|O_CREAT|O_EXCL,0777);
ptr=mmap(NULL,sizeof(struct shmstruct),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
// truncate the size of shared memory to the size of shmstruct
ftruncate(fd,sizeof(struct shmstruct));
close(fd);
// initialize the semaphores in shared memory
sem_init(&ptr->client_mutex,1,1); // set client semaphore to 1
sem_init(&ptr->server_mutex,1,0); // set server semaphore to 0
for(;;)
{
serverPosixShmSem(ptr); // calling server
}
}
私は共有メモリ/セマフォを作成したのと同じユーザとしてipcsを使用しています。サーバは共有メモリを作成し、共有メモリ内のセマフォを初期化する。バックグラウンドでサーバーを実行し、クライアントを実行する前にipcsと入力します。 – Anonymous
クライアントが完了すると、共有メモリとセマフォが削除されます。 – Anonymous