代码什么的要哭了 2022-05-12 10:44 采纳率: 67.9%
浏览 58
已结题

linux操作通信进程,编程实现生产者和消费者共享存储区功能。出现段错误,核心已转储问题(主要是消费者问题)

编程实现生产者和消费者共享存储区功能。生产者随机产生10个整型数据,写入共享存储区;消费者读出数据,并进行平方和平方根运算后输出。使用系统调用shmget()、shmat()、sgmdt()、shmctl()等, 实现程序。
生产者:


#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#define  KEY  75
#define K 1024
main()
{int shmid, *p, i;
char  * shmaddr;
shmid=shmget(KEY,K,0777|IPC_CREAT);
shmaddr=shmat(shmid,0,0);
p=(int *) shmaddr;
for(i=0;i<10;i++)
{  *p = rand()%100;
   sleep(1);
   printf("%d\n",*p);
   p++;
} 
sleep(5);
shmdt(shmaddr);
shmctl(shmid,IPC_RMID,0);
printf("end\n");
}

消费者

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#define  KEY  75
#define K 1024
main()
{int mid,*q, *t, i,num;
 char  *maddr;
 mid=shmget(KEY,K,0777);
 maddr=shmat(mid,0,0);
 q=(int *)maddr;
 sleep(6);
 for(i=0;i<10;i++)
 {
  num=(*q)*(*q);
  printf("%d\n",num);
  q++;
  num=0;
}
 shmdt(maddr);
 shmctl(mid,IPC_RMID,0);
}


  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-12 15:32
    关注

    直接在gdb中运行

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月4日
  • 修改了问题 5月24日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办