进程的通信—共享存储区通信
编程在主进程中创建两个子进程,在子进程 shmw()中创建一个系统 V 共享内存区,并在其中写 入格式化数据;在子进程 shmr()中访问同一个系统 V 共享内存区,读出其中的格式化数据。
#include<unistd.h> #include<sys/stat.h> #include<stdio.h> #include<sys/shm.h> #include<sys/types.h> #include<stdlib.h> #include<sys/ipc.h> #include<string.h> #define SHMKEY 777 int shmid1,shmid2; char *addr1,*addr2; char *str1="hello",*str2; void shmw() { shmid1=shmget((key_t)SHMKEY,1024,S_IRUSR|S_IWUSR|IPC_CREAT); addr1=shmat(shmid1,0,0); //printf("addr1:%p\n",addr1); //printf("shmid1:%d\n",shmid1); memset(addr1,'\0',1024); strncpy(addr1,str1,sizeof(str1)); printf("子进程send \"%s\"!\n",addr1); exit(0); } void shmr() { shmid2=shmget((key_t)SHMKEY,1024,S_IRUSR|S_IWUSR|IPC_CREAT); addr2=shmat(shmid2,0,0); printf("父进程recieve \"%s\"!\n",addr2); //printf("addr2:%p\n",addr2); //printf("shmid2:%d\n",shmid2); shmctl(shmid2,IPC_RMID,0); exit(0); } int main() { int p1,p2; while((p1=fork())==-1); if (!p1) shmw(); while((p2=fork())==-1); if (!p2) shmr(); wait(0); wait(0); return 0; }

浙公网安备 33010602011771号