【问题标题】:C shared memoryC 共享内存
【发布时间】:2010-09-21 13:07:36
【问题描述】:

我正在尝试使用 uClinux 在嵌入式设备上实现共享内存。

我的 C 源代码

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <errno.h>

//using namespace std;

int main() {
       int segment_id;

       segment_id = shmget(04,  getpagesize(), IPC_CREAT | 0666);

       printf("Page size - %d\n",getpagesize());
       printf("Error in socket - %d\n",errno);
}

我收到一个错误

Page size - 4096
Error in socket - 38

谁能帮助我? 谢谢。

【问题讨论】:

  • 我认为 errno 只有在出错时才设置为有意义的值(如果 shmget() 返回 -1),否则没有任何意义。
  • @pmg: 是的,errno 保留了它设置的最后一个值,它可能在任何地方,除非您在系统调用之前将其显式设置为零,然后在调用后检查它.否则它有一个无意义的(剩余的)值。
  • 我删除了 C++ 标签,因为没有 C++ 源代码。

标签: c memory embedded shared


【解决方案1】:

您需要测试segment_id 的值,并且只有在segment_id == -1 时才使用errno。

【讨论】:

  • 而且报错信息不正确——不涉及套接字。
【解决方案2】:

您的密钥04 看起来完全是假的。我猜你应该得到一个key_tftok

此外,如果您可以选择,最好选择shm_open / mmap 设施来完成此类任务。

既然我在,请使用perror 打印错误,并请从您的问题标题中删除 C++,与 C++ 无关。

【讨论】:

    【解决方案3】:

    errno 38 对应 ENOSYS,表示功能未实现。 我错过了内核配置。我必须启用 CONFIG_SYSVIPC。

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多