在共享内存进程中分配字符串

2024-04-17

我有一个程序需要在两个进程之间共享字符串。我已经声明了一个包含数组的结构*char。该结构体分配有shmget and shmat在主进程被分叉之前。

typedef struct Queue
{
    int index;
    char *directory[10];
} Queue;

在其中一个过程中,我尝试设置该值:(data->dir_name is a *char为字符串,例如“/data1”)

queue->directory[i] = data->dir_name; // Option 1
queue->directory[i] = "foo";          // Option 2

我的问题是,上面的第一条和第二条有什么区别?设置时queue->directory[i] to "foo",其他进程看到它。然而,传递值data->dir_name, 它不是。

提前致谢!


问题是您只分配了一个指针,而不是复制字符串数据。在第一种情况下,您将值设置为指向第二个进程看不到的内存。当你执行第一行时,指针data->dir_name被放入queue->directory[i],但是当另一个进程查看自己的内存空间中的该内存地址时,数据不在那里。另一方面,第二行放置静态字符串的地址"foo"到变量中。由于进程是从同一源编译的,因此该字符串位于每个进程内存中的同一位置,因此第二个进程可以看到它。

你想要做的是在你的结构中有一个缓冲区strcpy目录名放入.你需要

char directory[10][200];

and

strcpy (queue->directory[i], data->dir_name);

您需要检查字符串长度是否小于 200(在本例中),如果太长则报告相应的错误。我不熟悉共享内存函数,无法确切知道如何执行malloc相等的;如果你能做到的话;然后你可以将字符串复制到malloced 共享内存并将指向它的指针放入数组中,就像您在代码中一样。不过,从非常快速的谷歌搜索看来,malloc像这样的共享内存可能不会很好地工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在共享内存进程中分配字符串 的相关文章

  • 从实体获取单列

    如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象 但我想要的只是名称 IList
  • std::list::clear 是否会使 std::list::end 迭代器无效?

    检查这个代码 include stdafx h include
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector

随机推荐

  • HTML5 Canvas:绘制完成时获取事件

    我正在将图像绘制到画布元素 然后我就有了依赖于这个过程来完成的代码 我的代码如下所示 var myContext myCanvasElement getContext 2d myImg new Image myImg onload func
  • 什么是位掩码?

    我对 C 编程相当陌生 并且遇到了位掩码 位掩码的一般概念和作用是什么 非常感谢例子 掩码定义要保留哪些位以及要清除哪些位 屏蔽是将屏蔽应用于值的行为 这是通过执行以下操作来完成的 按位与运算以提取值中的位子集 按位或运算以设置值中的位子集
  • 大数据请求体为空

    我在 post 方法的正文中发送大量文本 我使用 Postman 来测试这一点 但是它工作正常 我可以像这样读取请求正文 String text request body asText 但是当我尝试在正文中发送大量数据时 我得到的文本为空
  • Websphere 7集群部署

    我们有一个 J2EE 应用程序作为 EAR 文件 部署在 WAS 7 中 为了使应用程序可用性尽可能高 需要部署在 3 个集群中 我们有一个 Quartz Scheduler 类 其工作是每天凌晨 2 00 将数据从一个数据库上传到另一个数
  • MobX-State-Tree 流程中的类型化 Yield 表达式

    在 MobX state tree MST 中执行异步操作的推荐方法是使用flow https mobx state tree js org concepts async actions 它接受一个生成器函数作为第一个参数 其中每个承诺都应
  • 在 Docker 容器接口上应用 NetEM WAN 延迟

    我想对 docker 容器的出口流量应用 NetEm 延迟 通常 我运行 sbin tc qdisc add dev INTERFACE root netem delay DELAY ms 问题是我不知道容器连接到的接口 例如 我正在运行以
  • 本地化 JavaAnpr 以获取本地车牌

    我正在与JavaAnpr http javaanpr sourceforge net 自动识别车牌 虽然它适用于欧洲车牌 但不适用于我的国家 例如 如何编辑资源文件和语法 XML 以支持其他国家 地区 michel layyous 这是作者
  • 从二元高斯分布生成均值

    我正在阅读统计学习要素ESLII http www stat stanford edu tibs ElemStatLearn 在第二章中 他们用高斯混合数据集来说明一些学习算法 为了生成该数据集 他们首先从二元高斯分布 N 1 0 I 生成
  • 如何在 Windows PowerShell 中使用 .bat 文件更改当前目录?

    我正在学习 Windows PowerShell 并且正在努力完成非常基本的任务 如何创建 bat 文件来更改当前目录 简单的 bat 文件cd mydir里面用得很好cmd exe 但它在 PowerShell 中不起作用 PS C Us
  • 将条目插入到 crontab 中,除非它已经存在(如果可能的话作为单行)[重复]

    这个问题在这里已经有答案了 将条目插入 etc crontab 的首选方法是什么 除非它存在 最好使用单行 这是我希望放入 etc crontab 中的示例条目 除非它已经存在于其中 1 some user python mount sha
  • 在 .NET core 2.0 中创建迁移步骤时,将“IDesignTimeDbContextFactory”的实现添加到项目错误中

    我有一个 NET core 1 0 web 应用程序运行良好 我必须升级到 NET Core 2 0 我还必须为我的 SQLite 数据库添加迁移步骤 如果我启动这个命令 添加迁移 MyMigrationStepName 我收到此错误 无法
  • JMS 会话寿命长。保持 JMS 连接/JMS 会话总是打开是一种不好的做法吗?

    保持 JMS 连接 会话 消费者始终打开是一种不好的做法吗 代码草案示例 app startup code ConnectionFactory cf ConnectionFactory jndiContext lookup CF JNDI
  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • itextsharp 不关闭文件

    我有一些用于 itextsharp 合并 2 个 pdf 文件的代码 在网上某处找到的 合并工作正常 但似乎源文件在全部完成后仍在使用 我想做的是删除我已经合并的第一个文件 通过文件上传上传 并仅保留合并的文件 肯定是执行合并的代码导致文件
  • AWS 上的 Laravel 调度任务无法正常工作

    我正在将 Laravel 应用程序部署到 ElasticBeanstalk 环境 我正在尝试在服务器上的计划任务中运行命令 但它不起作用 这就是我所做的 我在 Kernel php 文件中安排命令如下 schedule gt command
  • Solaris C++ 流输入 >> 运算符和模板的模板

    我有一个编译器选项 我可以在 CC 编译器中使用它来获取以下代码 在 Visual C 中编译良好 std vector
  • Android 和 Java 中的 RSA 加密

    我想用 RSA 加密来加密字符串 我的公钥 私钥已生成并存储在数据库中 在android中 我使用这段代码 public static String encryptRSAToString String text String strPubl
  • 如何在R中识别坐标

    我想确定向量的哪个坐标给我带来最大的价值 举一个简单的例子 假设 x lt c 10 22 20 18 5 最大值是22 但是如何自动识别坐标2具有最大值呢 Thanks which max正如 Hong Ooi 指出的那样 是你的朋友 g
  • 如何通过嵌套正确链接 Promise

    我的节点项目当前包含嵌套回调的侧向圣诞树 以便获取数据并按正确的顺序处理它们 现在我正在尝试使用 Promises 重构它 但我不确定如何正确执行 假设我要获取办公室列表 然后获取每个办公室的所有员工 然后获取每个员工的工资 最后 所有实体
  • 在共享内存进程中分配字符串

    我有一个程序需要在两个进程之间共享字符串 我已经声明了一个包含数组的结构 char 该结构体分配有shmget and shmat在主进程被分叉之前 typedef struct Queue int index char directory