System V下shared memory编程实例

例1:

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>

int main ()
{
 int segment_id;
 char* shared_memory;
 struct shmid_ds shmbuffer;
 int segment_size;
 key_t keys;
 const int shared_segment_size = 0x6400;
 
 keys= ftok("/usr", 'a');
 
 /* Allocate a shared memory segment. */
 segment_id = shmget (keys, shared_segment_size,IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
 
 /* Attach the shared memory segment. */
 shared_memory = (char*) shmat (segment_id, 0, 0);
 printf ("shared memory attached at address %p/n", shared_memory);

 /* Determine the segment’s size. */
 shmctl (segment_id, IPC_STAT, &shmbuffer);
 segment_size = shmbuffer.shm_segsz;
 printf ("segment size: %d/n", segment_size);

 /* Write a string to the shared memory segment. */
 sprintf (shared_memory, "Hello, world.");

 /* Detach the shared memory segment. */
 shmdt (shared_memory);

 /* Reattach the shared memory segment, at a different address. */
 shared_memory = (char*) shmat (segment_id, (void*) 0x5000000, 0);
 printf ("shared memory reattached at address %p/n", shared_memory);
 /* Print out the string from shared memory. */
 printf ("%s/n", shared_memory);

 /* Detach the shared memory segment. */
 shmdt (shared_memory);
 sleep(10); 
 /* Deallocate the shared memory segment. */
 shmctl (segment_id, IPC_RMID, 0);
 return 0;
}

例2:

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>

int main ()
{
 int segment_id;
 char* shared_memory;
 struct shmid_ds shmbuffer;
 int segment_size;
 key_t keys;
 const int shared_segment_size = 0x6400;
 
 keys= ftok("/usr", 'a');
 /* Allocate a shared memory segment. */
 segment_id = shmget (keys, shared_segment_size, S_IRUSR | S_IWUSR);
 
 /* Attach the shared memory segment. */
 if (segment_id < 0)
 {
  printf("Cannot get share memory/n");
  return -1;
 }
 shared_memory = (char*) shmat (segment_id, 0, 0);
 printf ("shared memory attached at address %p/n", shared_memory);

 /* Determine the segment’s size. */
 shmctl (segment_id, IPC_STAT, &shmbuffer);
 segment_size = shmbuffer.shm_segsz;
 printf ("segment size: %d/n", segment_size);

 /* Print out the string from shared memory. */
 printf ("shared_memory: %s/n", shared_memory);

 /* Detach the shared memory segment. */
 shmdt (shared_memory);
 
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值