共享内存编程中的 shm_open 和 ftruncate()

2024-02-05

我想创建一个共享内存对象并将其截断为特定大小。

SHMSIZE 定义为 512

MODE 设置为 S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP | S_IWOTH | S_IROTH

这是我的代码

char *shm_name = "SharedMemory";    
int fd; 

/* Open an Shared Memory Object for Read-/Write-Access */    
if((fd = shm_open(shm_name, O_RDWR | O_CREAT, MODE) < 0)) {     
     perror("\nshm_open() in Caretaker failed");    
     exit(EXIT_FAILURE);
}

/* Truncate Shared Memory Object to specific size */
if((ftruncate(fd, SHMSIZE) < 0)) {
    perror("\nftruncate() in Caretaker failed");
    exit(EXIT_FAILURE);
}

调试时我发现 shm_open() 的返回值每次都是 0,但我可以在 /dev/shm 中看到这个对象。在执行 ftruncate() 时,它每次都会返回错误“无效参数”。

为什么fd每次都是0,为什么ftruncate不起作用? 我应该怎么办?


该语句中的操作顺序很奇怪:

if((fd = shm_open(shm_name, O_RDWR | O_CREAT, MODE) < 0)) {

您正在分配的结果shm_open(...) < 0 to fd,这绝对不是你想要的。

将比较移到括号之外:

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

共享内存编程中的 shm_open 和 ftruncate() 的相关文章

随机推荐

  • 确定 xml 文件是否包含数据 - c#

    我如何知道我的 XML 文件是否还包含名称空间信息之外的数据 一些文件包含以下内容 如果我遇到这样的文件 我想将该文件放在错误目录中 您可以使用 XmlReader 来避免 XmlDocument 的开销 在您的情况下 您将收到异常 因为根
  • pip 下载而不执行 setup.py

    如何下载发行版 可能是 sdist 而不可能执行setup py文件 可能包含恶意代码 我不想递归获取依赖项 只想下载指定发行版的一个文件 尝试无效 pip download no deps mydist 这是一个可重现的示例 演示了set
  • 如何向我在 Android 中用作背景的可绘制对象添加圆角?

    我有一个特定的可绘制对象 在我的应用程序中用作背景 它不是纯色 现在我想给这个可绘制对象添加圆角 我只发现圆角可用于具有渐变或纯色作为背景的形状 但没有其他可绘制的形状 是否有另一种简单的方法向可绘制对象添加圆角 Use AQuery使可绘
  • 桶太多,直方图聚合失败

    我有一个对 elastic 的查询 其中包含总共 8 个嵌套聚合 所有聚合都是term聚合 除了一个聚合histogram聚合 如果我删除该直方图聚合 查询将完美运行 但对于直方图聚合 它会抛出这个特定的错误 此聚合创建了太多存储桶 100
  • 为任何 CMS 系统创建 sitemap.xml 的最有效的性能方法是什么?

    我们想要在 CMS 系统中实现 sitemap xml 功能 我们的开发人员内部有一些争论 认为此功能会影响性能 因为每次内容发生更改时 都需要创建网站的完整链接列表并将其放置在 sitemap xml 中 这个想法是 每次编辑或添加公共查
  • Android Studio 中的 APK 分析器是什么以及如何充分利用它?

    Android Studio 包含一个 APK 分析器 可在顶部菜单中找到 Build gt Analyze APK 它是什么以及如何充分利用它 构建过程完成后 APK 分析器可以提供有关 APK 文件组成的详细信息 使用 APK 分析器的
  • Python 将私钥转换为 RSA 密钥

    我有一个具有以下格式的私钥 BEGIN ENCRYPTED PRIVATE KEY MIIE6TAbBgkqhki END ENCRYPTED PRIVATE KEY 如何将其转换为 RSA 格式的密钥 BEGIN RSA PRIVATE
  • C++ 在后台有一个函数重复

    我正在使用微软视觉表达 我已查看已接受的答案this https stackoverflow com questions 10807681 loop every 10 second问题 它似乎没有做我想做的事 这是对我来说每秒重复的函数 d
  • 为什么这个偶数函数的 FFT 不是真实的?

    因此 在 iPython 中 我运行以下命令 In 1 from pylab import In 2 x np array 4 3 2 1 0 1 2 3 4 In 3 rfft x Out 3 array 20 00000000 0 j
  • 层支持的 NSView 性能,直接在 CALayer.drawInContext 中渲染:

    我有许多层支持的视图包含在NSScrollview and am 主要关注滚动性能 The documentView和更高层是受层支持的 因此它们的子视图也是受层支持的 以下是显示 渲染代码可以放置的三个自然位置 覆盖NSView want
  • 对 Buffer (Node.js) 内容执行 .replace() ?

    这是一个相当新的问题 但我还没有通过 Google SO Etc 找到任何可靠的答案 如果缓冲区中有内容 运行缓冲区的最佳模式是什么 replace 关于那个内容 您是否只是简单地提取内容 toString run replace 然后把它
  • Access DB - 在一个字段中保存文件位置(完整)链接/路径,在其他字段中保存文件名(两者或其中之一应可单击以打开文件)

    这是我的第一篇文章 我是 MS Access 新手 没有编码经验 我有一个 Access 数据库 其中有一个表调用附件 字段为 保存路径 和 文件名 两者都是超链接数据类型 由于 MS Access 附件选项下有 2GB 的限制 因此我想保
  • Jboss AS7 - 如何为外部库创建 module.xml?

    我有多个使用多个库的 ear 项目 所以我需要使它们变得通用并将它们添加到模块中 那么 当我需要为每个库创建 module xml 时 是否有任何简单的方法来创建 module xml 我还需要在 module xml 中定义每个库的依赖关
  • 如何在 Rabbit.js 上创建 REP/REQ

    我已经在 Net 上使用 RabbitMQ 一段时间了 并且没有遇到太大的问题 现在我正在使用 node js 迁移到rabbit js 但我对它不太熟悉 rabbit js 的文档有限 我只知道基本的 PUSH PULL 或 PUB SU
  • 如何在C#中使组合框在鼠标悬停时自动展开并在鼠标离开组合框时关闭? [复制]

    这个问题在这里已经有答案了 我有一个窗口窗体 在该窗口窗体中我有一个组合框 我在组合框中预定义了项目添加 删除和删除 我想让组合框在鼠标悬停时自动展开 我怎样才能做到这一点 我注意到自动展开代码应该在组合框的鼠标悬停事件中给出 像这样 pr
  • 为什么我的平方函数不运行?

    我决定编写一个程序来计算数字的平方只是为了好玩 使用在线编译器 我输入了代码 据我所知 没有错误 它不会运行它只会有一个空白的控制台条目 我的代码 import math def square number raw input Please
  • php:自动缩进整个代码?

    是否有任何 netbeans eclipse 的软件 插件可以在插入后自动缩进整个代码 当我按下 ENTER 以获得新功能时 不仅仅是缩进 我想粘贴一个没有缩进的代码 它会自动缩进所有内容 因为它可以识别使用的语言 应该可以节省很多时间 在
  • 如何在 Google 电子表格中减去两组值?

    我有两组值A A and B B 如何在它们之间进行设置差异 最好使用公式 即从A A不存在于B B 这样的公式可以做到这一点 并且速度相当快 filter A A countif B B A A 0
  • 在 View(CakePHP) 中,获取当前控制器的正确方法?

    在视图中 我可以通过使用来采取行动 this gt action 但是 我无法通过以下方式获取控制器名称 this gt controller 在视图中获取当前控制器的正确方法是什么 Use this gt params controlle
  • 共享内存编程中的 shm_open 和 ftruncate()

    我想创建一个共享内存对象并将其截断为特定大小 SHMSIZE 定义为 512 MODE 设置为 S IRUSR S IWUSR S IWGRP S IRGRP S IWOTH S IROTH 这是我的代码 char shm name Sha