代码列表5.1 (shm.c) 尝试共享内存
2013-02-06 22:25
225 查看
#include <stdoi.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main ()
{
int segment_id;
char* shared_memory;
struct shmid_ds shmbuffer;
int segment_size;
const int shared_segment_size = 0x6400;
/* 分配一个共享内存块*/
segment_id = shmget (IPC_PRIVATE, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR );
/* 绑定到共享内存块*/
shared_memory = (char*) shmat (segment_id, 0, 0);
printf ("shared memory attached at address %p\n", shared_memory);
/* 确定共享内存的大小*/
shmctl (segment_id, IPC_STAT, &shmbuffer);
segment_size = shmbuffer.shm_segsz;
printf ("segment size: %d\n", segment_size);
/* 在共享内存中写入一个字符串*/
sprintf (shared_memory, "Hello, world.");
/* 脱离该共享内存块*/
shmdt (shared_memory);
/* 重新绑定该内存块*/
shared_memory = (char*) shmat (segment_id, (void*) 0x500000, 0);
printf ("shared memory reattached at address %p\n", shared_memory);
/* 输出共享内存中的字符串*/
printf ("%s\n", shared_memory);
/* 脱离该共享内存块*/
shmdt (shared_memory);
/* 释放这个共享内存块*/
shmctl (segment_id, IPC_RMID, 0);
return 0;
}
5.1.7 调试
使用ipcs 命令可用于查看系统中包括共享内存在内的进程间通信机制的信息。指定-m
参数以获取有关共享内存的信息。例如,以下的示例表示有一个编号为1627649的共享内存
块正在使用中:
% ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1627649 user 640 25600 0
如果这个共享内存块在程序结束后没有被删除而是被错误地保留下来,你可以用ipcrm
命令删除它。
% ipcrm shm 1627649
#include <sys/shm.h>
#include <sys/stat.h>
int main ()
{
int segment_id;
char* shared_memory;
struct shmid_ds shmbuffer;
int segment_size;
const int shared_segment_size = 0x6400;
/* 分配一个共享内存块*/
segment_id = shmget (IPC_PRIVATE, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR );
/* 绑定到共享内存块*/
shared_memory = (char*) shmat (segment_id, 0, 0);
printf ("shared memory attached at address %p\n", shared_memory);
/* 确定共享内存的大小*/
shmctl (segment_id, IPC_STAT, &shmbuffer);
segment_size = shmbuffer.shm_segsz;
printf ("segment size: %d\n", segment_size);
/* 在共享内存中写入一个字符串*/
sprintf (shared_memory, "Hello, world.");
/* 脱离该共享内存块*/
shmdt (shared_memory);
/* 重新绑定该内存块*/
shared_memory = (char*) shmat (segment_id, (void*) 0x500000, 0);
printf ("shared memory reattached at address %p\n", shared_memory);
/* 输出共享内存中的字符串*/
printf ("%s\n", shared_memory);
/* 脱离该共享内存块*/
shmdt (shared_memory);
/* 释放这个共享内存块*/
shmctl (segment_id, IPC_RMID, 0);
return 0;
}
5.1.7 调试
使用ipcs 命令可用于查看系统中包括共享内存在内的进程间通信机制的信息。指定-m
参数以获取有关共享内存的信息。例如,以下的示例表示有一个编号为1627649的共享内存
块正在使用中:
% ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1627649 user 640 25600 0
如果这个共享内存块在程序结束后没有被删除而是被错误地保留下来,你可以用ipcrm
命令删除它。
% ipcrm shm 1627649
相关文章推荐
- 互斥锁,条件变量,读写锁,信号灯,共享内存的一些代码
- mmap和shm共享内存的区别和联系
- 【XEN】Dom0与DomU内存共享代码及原理分析
- Linux 多线程编程( POSIX )( 六 )----->代码区 ( 共享内存实例 )
- LINUX下利用特殊文件系统shm 实现内存的共享
- shm*()--共享内存操作函数
- Linux共享内存对象,shm_open,mmap
- delphi 实现两个exe文件共享内存映像的代码
- 共享内存 shm
- 理论+实践来认识/dev/shm(共享内存目录)
- 共享内存代码
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- linux下共享内存(shm)使用示例
- 共享内存多次写入不同类型的数据测试代码
- 两种共享内存的实现区别,shm和mmap
- (转)mmap和shm共享内存的区别和联系
- Head First Python---------(一)第一章(初识Python__人人都爱列表)、第二章(共享你的代码__函数模块)、第三章(文件与异常__处理错误)
- C扩展 从共享内存shm到memcache外部内存
- shm创建共享内存
- shm_open和mmap,以及共享内存