Linux中为什么sem_open返回0,我可以在下面的程序中使用sem_open,但是我在这里看到崩溃?...
我正在为共享内存上的学生制作一个教程。不过,我在等待或发布信号时看到崩溃。我正在使用sem_open API来初始化信号量。在做sem_open之前我需要分配一些内存吗?它在我看来是一个分段错误。你能帮我吗?我可以在下面的程序中使用sem_open,但是我在这里看到崩溃?
#include
#include
#include
#include
#include
/** page size **/
#include
/** memcpy **/
#include
#include
#include
using namespace std;
class READER_WRITER_A
{
private:
string msg;
void *shm_ptr;
int shm_id;
sem_t *sem_rw;
void Init_Shm();
void Init_Sem();
public:
void Read_Msg();
void Write_Msg(string s1);
READER_WRITER_A();
};
void READER_WRITER_A::Init_Shm()
{
key_t key;
key = ftok("/home/joshis1/Downloads/IPC-BLOG/shm",1);
shm_id = shmget(key, getpagesize(), IPC_CREAT| 0660);
shm_ptr = shmat(shm_id, NULL, 0660);
}
void READER_WRITER_A::Init_Sem()
{
sem_rw = sem_open("/home/joshis1/Downloads/IPC-BLOG/rw_sem", O_RDWR | O_CREAT, 0666, 0);
cout<
if(sem_rw < 0)
cout<
sem_post(sem_rw);
cout<
}
void READER_WRITER_A::Read_Msg()
{
//sem_wait(sem_rw);
int *size = (int *)shm_ptr;
void *msg_ptr = shm_ptr;
msg_ptr+=sizeof(int);
cout<
memcpy(&msg,(string *)msg_ptr,*size);
cout<
//sem_post(sem_rw);
}
void READER_WRITER_A::Write_Msg(string s1)
{
//sem_wait(sem_rw);
void *msg_ptr = shm_ptr;
msg = s1;
int *pt = (int*)shm_ptr;
*pt = s1.size();
cout<
msg_ptr+=sizeof(int);
cout<
memcpy((string *)msg_ptr,&msg,s1.size());
//sem_post(sem_rw);
}
READER_WRITER_A::READER_WRITER_A()
{
Init_Shm();
Init_Sem();
}
int main(int argc, char *argv[])
{
READER_WRITER_A val;
val.Write_Msg("I am A-RW");
val.Read_Msg();
return 0;
}
这是输出。
$ ./reader_writer_a.out
Sem_Post calling
Segmentation fault (core dumped)
这里分析coredump。
(gdb) bt
#0 0x0000003fb060d790 in sem_post() from /lib64/libpthread.so.0
#1 0x0000000000400fd0 in READER_WRITER_A::Init_Sem (this=0x7fff50e322a0) at reader_writer_a.cpp:52
#2 0x0000000000401199 in READER_WRITER_A::READER_WRITER_A (this=0x7fff50e322a0) at reader_writer_a.cpp:86
#3 0x00000000004011d8 in main (argc=1, argv=0x7fff50e323c8) at reader_writer_a.cpp:92
Linux中为什么sem_open返回0,我可以在下面的程序中使用sem_open,但是我在这里看到崩溃?...相关推荐
- [转]使用 .NET Framework 2.0 在您的应用程序中支持证书
NET 安全 使用 .NET Framework 2.0 在您的应用程序中支持证书 Dominick Baier 本文讨论: Windows 证书存储区 .NET 中的证书类 验证.SSL.Web 服 ...
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...
- 小程序如何修改缓存中的某一个字段的值;小程序中如何应用vant组件 如:van-dropdown-item、van-field
1.小程序如何往缓存中存数据 将数据放入指定缓存中. 这里缓存块的名称叫'mydata',你可以根据自己的需求,取合适的名字.代码如下 let data = {name: '8BQ了',age: '1 ...
- 【解析】在高级语言源程序中, 常需要用户定义的标识符为程序中的对象命名,常见的命名对象有()
在高级语言源程序中, 常需要用户定义的标识符为程序中的对象命名,常见的命名对象有() A.关键字 B.变量 C.函数 D.数据类型 E.注释 一个一个分析: 关键字 :虽然很多关键字都可以用过defi ...
- oracle 数据库中执行数据库语句能找到数据,但是程序中却抓取不到
oracle 数据库中执行数据库语句能找到数据,但是程序中却抓取不到? 原因:数据库中插入数据时没有commit,执行COMMIT后就可以查询到. 转载于:https://www.cnblogs.co ...
- c语言中的语义错误和语法错误,C语言程序中对错误的调试
程序调试 现在我们已经可以编写一个简单的 C语言程序了,但是你可能会犯一些简单的错误.程序的错误通常叫做 bug,而发现和修正这些错误的过程叫做调试.下面有一个带有一些错误的程序,看看你能找出多少. ...
- socket中的read返回0
在socket中服务器与客户端进行通信,当其中一方调用close(即这一方会发送一个fin)关闭套接字之后,另一方read()会返回一个0. 我之前编写的一个服务器与客户端通信(一个服务器只连接一个客 ...
- .net linux 界面设计,.NET Core3.0开发Liunx桌面应用程序
.NET Core3.0开发Liunx桌面应用程序主要是依靠GTK. 什么是GTK? GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发.跨平台的图形工具包.最初是为GIMP写的,已 ...
- 敏捷中gwt含义_在您的GWT应用程序中添加JSON功能
敏捷中gwt含义 JSON简介 在Web应用程序上工作时,总是会出现客户端-服务器数据交换的问题. 在此问题上有多种方法,其中许多使用XML进行交换. 执行此任务的一种不太知名的格式是JSON. JS ...
最新文章
- php 空格用什么表示方法,php用空格代替标点符号
- mysql 备份需要的权限_mysqldump 备份数据库用户所需要的权限
- Java程序停止 mq通道未关闭_java – 如何在MQ上停止丢失消息
- Spark灰度发布在十万级节点上的实践
- 玩转你画我猜(二):更优秀的绘图程序
- python如何导入类里_Python中如何导入类示例详解
- 更新pip版本至最新
- 港口水域电子海图数据快速检索算法及应用
- 内蒙古自治区包头市谷歌高清卫星地图下载
- Github注册中,邮箱验证通不过解决办法
- 搭建基于 Docker 的 CI/CD
- 计算机网络重置点命令,WinXP系统如何通过cmd命令对网络进行重置
- 颜色空间:RGB,CMY,HSV,HSL,Lab,YUV详解
- qp_查看表的数据是否更新了指定的某一天数据
- 给你个使用NAS私有云服务器的理由
- BeautifulSoup案例2——抓取优美图库
- EA周报 | Libra将与支付宝微信展开竞争;Google终止中国版搜索引擎;滴滴柳青:顺风车目前不能上线是因为害怕...
- 第二章-连接到WAN
- 【Tushare 大数据社区——解救你的财经数据需求】
- Cannot download sources Sources not found for:xxx解决方法汇总
热门文章
- 蓝桥杯刷题冲刺 | 倒计时19天
- 如何获取股票外汇期货的实时行情数据和历史行情数据?
- surf.detectAndCompute()提取keypoint中关键点坐标
- Linux离线安装SVN并配置
- 制定带铜衬轴套零件的加工工艺,设计铣20台面的铣床夹具(含全套CAD图纸)
- 动态拨号器linux,Debian Linux下ADSL拨号及动态域名的使用
- GPRS外置模块连接电脑进行拨号上网
- 安卓手机游戏 纪念碑谷1+2+被遗忘海岸+艾达的梦 解锁码
- mysql administrator tool 1.1_MySQL Administrator
- ADS纯视觉感知产品设计的痛点观察