进程的通信—共享存储区通信

编程在主进程中创建两个子进程,在子进程 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;
}

 

 

posted @ 2017-11-03 21:26  奇热行  阅读(343)  评论(0)    收藏  举报