col 映射 一个 标识 define [] clas 操作 style
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/shm.h>
- /*************基本的函数API********************
- 共享内存函数API
- int shmget(key_t key, int size, int flag)
- key:
- 共享内存的键值,多个进程可以通过它访问同一个共享内存。常用特殊值:IPC_PRIVATE,创建当前进程的私有共享内存
- size:
- 指定创建共享内存的大小
- flag:
- 操作权限
- char * shmat(int shm_id, const void * addr, int flag)
- shm_id:
- 要映射的共享内存标识符
- addr:
- 指定在调用进程中映射共享内存的地址。通常取值为0,表示由系统自动分配地址。
- flag:
- 设置共享内存的操作权限。若取值为0,表示可对共享内存进行读写操作。
- int shmctl(int shm_id, int cmd, struct shmid_ds * buf)
- shm_id:
- 共享内存标识符
- cmd:
- 指定索要进行的操作:IPC_STAT IPC_SET IPC_RMID SHM_LOCK SHM_UNLOCK
- buf:
- 结构体型指针
- int shmdt(const void * addr)
- **********************************************/
- #define Test_pipe 0
- #define Test_Shmget 0
- #define Test_AT_w 0
- #define Test_AT_r 0
- #define Test_DT 1
- int main(int argc, char *argv[])
- {
- #if Test_pipe
- int x,fd[2];
- char buf[30],s[30];
- pipe(fd);
- x = fork();
- if(0 == x)
- {
- sprintf(buf,"This is an pipe!");
- write(fd[1],buf,30);
- exit(0);
- }
- else
- {
- wait(0);
- read(fd[0],s,30);
- printf("read: %s\n",s);
- }
- #endif
- #if Test_Shmget
- int shm_id;
- shm_id = shmget(IPC_PRIVATE,4096,0666);
- if(shm_id < 0)
- {
- perror("shmget id < 0");
- exit(0);
- }
- printf("成功建立共享内存区域: %d\n",shm_id);
- system("ipcs -m");
- #endif
- #if Test_AT_w
- int shm_id;
- char *shm_buf;
- shm_id = atoi(argv[1]);
- shm_buf = shmat(shm_id,0,0);
- printf("写如数据到共享内存:\n");
- sprintf(shm_buf,"对共享内存的读写操作!");
- printf("%s\n",shm_buf);
- #endif
- #if Test_AT_r
- int shm_id;
- char *shm_buf,str;
- shm_id = atoi(argv[1]);
- shm_buf = shmat(shm_id,0,0);
- printf("写如数据到共享内存:\n");
- sprintf(str,shm_buf);
- printf("%s\n",str);
- system("ipcs -m");
- #endif
- #if Test_DT
- int shm_id;
- char *shm_buf;
- shm_id = atoi(argv[1]);
- shm_buf = shmat(shm_id,0,0);
- shmdt(shm_buf);
- shmctl(shm_id,IPC_RMID,NULL);
- system("ipcs -m");
- #endif
- }
未完待续~
Linux下C语言进程通讯编程
来源: http://www.bubuko.com/infodetail-2338203.html