请教下IPC 共享内存

hl0702xin 2010-08-03 09:41:36
谁给我指点下,一个IPC 共享内存的例子 子进程向共享内存写入内容,然后退出,父进程等待子进程退出后,从共享内存读入内容,但是这里出现了错误``子进程不知道为何没有执行,直接就退出了,用 gdb跟踪发现根本没有进入子进程,而且到父进程报错:

Program received signal SIGSEGV, Segmentation fault.
0x0016e50b in vfprintf () from /lib/tls/i686/cmov/libc.so.6
(gdb)
注:参数在main函数入口给出,为要写入共享内存的字符串

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
pid_t childpid;
int id;
int i;
int buf[10];
char *ptr;
int totalbytes=0;
if((childpid=fork())==-1)
{
perror("fork");
exit(1);
}
if(childpid==0)
{
if((id=shmget((key_t)12345,50*sizeof(char),IPC_CREAT))==-1)//创建共享内存
{
perror("shmget");
exit(EXIT_FAILURE);
}
if((ptr=(char *)shmat(id,NULL,0))==NULL)//子进程挂载
{
printf("failed to shmat\n");
if(shmctl(id,IPC_RMID,0)==-1)
perror("shmctl");
exit(1);
}
for(i=0;argv[1][i]!='\0';i++)//写入字符
{
*ptr=argv[1][i];
ptr++;
}
printf("this is child\n,write argv[1] to shm.\nyou input charater count is %d\n",i);
exit(0);
}
else
{
wait(NULL);//等待子进程结束
if((id=shmget((key_t)12345,50*sizeof(char),IPC_CREAT))==-1)//创建共享内存
{
perror("Failed to create sharedm omory segment");
exit(1);
}
if((ptr=(char *)shmat(id,NULL,0))==NULL)//挂载
{
if(shmctl(id,IPC_RMID,0)==-1)
perror("shmget");
exit(EXIT_FAILURE);
}
printf("this is parent,input charater is %s\n",ptr);//显示内存中的内容
if(shmctl(id,IPC_RMID,NULL)==-1)
{
perror("shmctl");
exit(1);
}
exit(0);
}

}
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
longx_ok 2010-10-18
  • 打赏
  • 举报
回复
哈哈哈,我知道答案了。这个例子我调试过,貌似过了好多天才回帖,貌似有点不厚道哦。
楼主把那个(key_t)12345这个值改掉就应该可以了,或者自己用ftok()重新生成一个key_t就行。
我把那个(key_t)123456就行了,楼主试试,有问题,继续M我,O(∩_∩)O~
longx_ok 2010-10-08
  • 打赏
  • 举报
回复
晚上回去帮你ss,学校机房没环境,玩不起来
ProgrammerNO1 2010-08-04
  • 打赏
  • 举报
回复
调试技巧。。。
hl0702xin 2010-08-03
  • 打赏
  • 举报
回复
谢谢友情的··有专业的没··悲剧啊·
liuxuejin 2010-08-03
  • 打赏
  • 举报
回复
帮顶!友情路过
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧