标签:class 自动 函数 linux 进程 def 同步机制 内存映射 define 不同
int shmget(key_t key, size_t size, int shmflg); // key的值 0/IPC_PRIVATE IPC_CREATE时创建一块内存 // size 多少字节 // 标志
返回共享内存的标识符
void *shmat(int shmid, const void *shmaddr, int shmflg); // 创建时返回de 共享内存的标识符 // flag 决定以什么方式映射 一般是0 // addr
int shmdt(const void *shmaddr);
linux 中wait用法
进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁 后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #define PERM S_IRUSR|S_IWUSR /* 共享内存 */ int main(int argc,char **argv) { int shmid; char *p_addr,*c_addr; if(argc!=2) { fprintf(stderr,"Usage:%s\n\a",argv[0]); exit(1); } /* 创建共享内存 */ if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1) { fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno)); exit(1); } /* 创建子进程 */ if(fork()) // 父进程写 { p_addr=shmat(shmid,0,0); // 传 0 代表由系统自动给你指定一个地址 memset(p_addr,‘\0‘,1024); strncpy(p_addr,argv[1],1024); wait(NULL); // 释放资源,不关心终止状态 exit(0); } else // 子进程读 { sleep(1); // 暂停1秒 c_addr=shmat(shmid,0,0); printf("Client get %p\n",c_addr); exit(0); } }
标签:class 自动 函数 linux 进程 def 同步机制 内存映射 define 不同
原文地址:http://www.cnblogs.com/hkyst/p/7678543.html