C linux共享内存不能存储大整数值

标签 c linux

我在编程方面还是个菜鸟,我遇到了一个我自己无法解决的问题,所以我试图在网上寻求帮助,但找不到任何解决方案。

我目前正在尝试在 Linux 中创建一个程序,它利用共享内存在两个程序之间传输整数。我可以成功传输小整数,例如 50 或 99,但是我无法写入大于 100 左右的值,除非我尝试从段中读取它,否则它们会变成完全不同的随机值。

我已经坐下来查看我的代码几个小时了,但无法弄清楚。 你们中任何更熟练的程序员可以就此问题的可能原因给我一些建议吗?

谢谢

这是第一个将整数 testValue 写入段的程序,但是如果测试值比 100 高一点,比如 150,输出将变成另一个值。小于 100 的值通常有效。

ps = shmPointer;
for(Count = 1; Count <= atoi(argv[1]); Count++)
    {
        *ps++ = testValue;
    }

*ps = (char)NULL;

while(*shmPointer != (char)'*')
{
    sleep(1);
}

对于段大小我做了一个 #define SHMSZ 100 我的 shmget 调用是 shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);

下面是另一个程序的代码,它检索存储在段中的整数:

ps = shmPointer;

for(ps = shmPointer; *ps != (char)NULL; ps++)
{
    printf("Value: %d\n", (int)*ps)
}

printf("\n");

*shm = '*';

最佳答案

假设 ps 的类型为“char *”,您尝试的操作将不起作用。您不能在 char 中存储任意整数(只有 -128 到 +127 可以存储在 signed char 中)。 – 弗雷德克

关于C linux共享内存不能存储大整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385228/

相关文章:

c - 在管道图中,数据危险的数据转发如何工作

c - 使用 gcc 4.8.1 和 Mingw gcc 4.7.2 进行字符串操作

c++ - 从 shm_open() + mmap() 更改共享内存的可见性

java - OpenCV 2.4.9 在 eclipse Juno 上使用 java - Ubuntu 14.04

linux - 如何检查变量是否包含有效的 ip 地址

c - 随机硬故障 - STM32F4 - FreeRTOS

c - 创建共享对象时不能使用针对 `.text' 的重定位 R_X86_64_32S

linux - 请求 PTRACE_POKETEXT 的 ptrace 失败

linux - 如何在C中制作一个fifo?

php - 将记录发布到父子关系表