C linux共享内存无法存储大整数值

时间:2016-12-29 18:25:23

标签: 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 = '*';

1 个答案:

答案 0 :(得分:0)

假设ps的类型为“ char *”,则您尝试执行的操作将不起作用。您不能在char中存储任意整数(带符号的char中只能存储-128到+127)。 – FredK