【问题标题】:C linux shared memory cannot store large integer valueC linux共享内存不能存储大整数值
【发布时间】:2016-12-29 18:25:23
【问题描述】:

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

我目前正在尝试在 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 = '*';

【问题讨论】:

标签: c linux


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2016-05-24
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多