马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编程在主进程中创建两个子进程,在子进程 shmw()中创建一个系统 V 共享内存区,并在其中写入格式化数据;在子进程 shmr()中访问同一个系统 V 共享内存区,读出其中的格式化数据。
运行结果是自己想要的,但是会显示段错误,核心已转储。想求助一下怎么解决,是什么原因
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <stdlib.h>
#define SHMKEY 75
int shmid,i;
int *addr;
void shmw()
{
int i;
shmid = shmget(SHMKEY,1024,0777);
addr = shmat(shmid,0,0);
for(i=9;i >=0;i--)
{
while(*addr !=-1);
printf("sent\n");
*addr = i;
}
exit(0);
}
void shmr()
{
shmid = shmget(SHMKEY,1024,0777|IPC_CREAT);
addr = shmat(shmid,0,0);
do
{
*addr = -1;
while(*addr == -1);
printf("received\n");
}while(*addr);
shmctl(shmid,IPC_RMID,0);
exit(0);
}
main()
{
int pid1,pid2;
while((pid1 = fork()) == -1);
if(pid1 == 0)
{
shmr();
wait(0);
}
else
{
while((pid2 == fork()) ==-1);
if(pid2 == 0)
{
shmw();
wait(0);
}
}
}
|