共享内存代码实现中遇到的一系列问题附解决方法

在学习进程间通信时,想实现基于共享内存的进程间通信方法。编写源代码如下:
写入方:
在这里插入图片描述
读出方:
在这里插入图片描述
在使用:gcc -o writer.o write.c 进行编译时,两个文件都没有报错和警告。
在当前执目录下运行writer.o:./writer.o,出现segmentation fault,报错如下:
在这里插入图片描述
使用gdb调试:
编译时执行:gcc -g -o writer.o writer.c
执行:gdb ./writer.o进入gdb调试。
由于代码行数不多,在main函数中每行设置一个断点:b 行数
开始运行:r单步运行:n
执行到strcpy函数处出现segmentation fault。如图:
在这里插入图片描述锁定错误。
错误是因为gdb在寻找strcpy函数的源码,只要libc里没有这个函数都会报这个错误。解决方法:
git clone https://github.com/jeremie-koenig/glibc /opt/src/glibc
当执行这条命令时,会报错如下:
在这里插入图片描述
按照指示执行:sudo apt install git 报错如下:
在这里插入图片描述
解决方法:

  1. 找到所有的apt进程并杀死:
    在这里插入图片描述
  2. 进入到/var/lib/dpkg目录下,将lock文件强制删除。依次执行以下命令:
    sudo rm lock
    sudo dpkg --configure -a
    sudo apt update在这里插入图片描述接着安装git:在这里插入图片描述
    继续执行我们glibc库的下载:
    在这里插入图片描述
    过程相当漫长啊~~
    找到一种方法说是可以加快git下载速度,进入/etc目录下,打开hosts文件,在最后添加两行:
    151.101.72.249 http://global-ssl.fastly.net
    192.30.253.112 http://github.com
    重启虚拟机。
    然而速度并没有提升很多,不知道什么原因(微笑脸)
    问题一个又一个,总是解决不完,应该是解决思路出现了问题,最后请教了一位经验丰富的老师,他试了几下问题就解决了,需要指定path的路径并在root权限下运行,代码改动如下:
    在这里插入图片描述其中test是一个空文件。读出方代码修改如下:
    在这里插入图片描述
    同样在root权限下编译运行后,结果如下:
    在这里插入图片描述
    问题解决!不能不说走了很多弯路啊,不过也学到了很多,就把整个过程记录下来了,大家遇到中间某些问题也可以参考一下解决方法。
    欢迎大家来评论区骚扰,多多交流,共同进步!!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值