shm共享内存使用示例
2013-04-02 11:14
417 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/ipc.h> #include <sys/shm.h> #include <errno.h> #include <unistd.h> typedef struct { int nId; char sValue[1024]; }MemTest; MemTest *ptTest = NULL; int InitMem() { int SYS_MPU_SHM_KEY = 12345; // int shmHandle = shmget(SYS_MPU_SHM_KEY, sizeof(MemTest), SHM_R | SHM_W | IPC_CREAT | IPC_EXCL); int shmHandle = shmget(SYS_MPU_SHM_KEY, sizeof(MemTest), SHM_R | SHM_W | IPC_CREAT); if (shmHandle == -1) { printf("shmget error: %s\r\n", strerror(errno)); return -1; } ptTest = (MemTest *)shmat(shmHandle, NULL, 0); if(ptTest == (MemTest *)-1) { printf("shmat error: %s\r\n", strerror(errno)); return -1; } memset(ptTest, 0, sizeof(MemTest)); printf("shm initialized ok : %d\r\n", shmHandle); return 0; } int main(void) { if(0 != InitMem()) exit(-1); pid_t pid = fork(); if(pid < 0) { printf("fork fail\r\n"); exit(-1); } if(pid > 0) { //parent process ptTest->nId = 123; sprintf(ptTest->sValue, "%s", "test"); printf("parent:%d,%s\r\n", ptTest->nId, ptTest->sValue); sleep(20); printf("parent:%d,%s\r\n", ptTest->nId, ptTest->sValue); } else { //child process sleep(5); printf("child:%d,%s\r\n", ptTest->nId, ptTest->sValue); sleep(10); ptTest->nId = 456; sprintf(ptTest->sValue, "%s", "TEST"); sleep(10); } return 0; } void ShmTakeowner(int shmid, uid_t uid, gid_t gid) { struct shmid_ds shmds; memset(&shmds, 0x0, sizeof(struct shmid_ds)); shmds.shm_perm.uid = uid; shmds.shm_perm.cuid = uid; shmds.shm_perm.gid = gid; shmds.shm_perm.cgid = gid; shmds.shm_perm.mode = 0777; shmctl(shmid, IPC_SET, &shmds); }
相关文章推荐
- linux下共享内存(shm)使用示例
- Linux共享内存示例,使用信号量同步
- Solaris系统SHM共享内存使用方法
- windows 下共享内存使用方法示例
- Golang1.7使用kernel32.dll 读取共享内存,代码小示例
- 使用shm_open来操作共享内存
- linux c之shm共享内存的使用例子
- 用户态和内核共享内存----使用 /dev/mem & mmap
- linux 共享内存的使用
- php共享内存使用
- 共享内存示例代码如下:
- 使用二级指针分配和释放内存示例 malloc(), free()
- 使用mmap函数进行内核空间和用户空间的共享内存通信
- 使用信号量和共享内存实现进程间通信
- MySQL内存使用 – 全局共享
- Linux进程间通信的两种方式:使用共享内存和信号量
- linux/Unix 共享内存 mmap() 函数使用的一个问题
- Boost.Interprocess使用手册翻译之四:在进程间共享内存 (Sharing memory between processes)
- 由一个简单示例 引出java继承中父子类成员变量共享问题 以及super的使用
- CUDA的内存结构,通过实例展示寄存器和共享内存的使用