我在编程方面还是个菜鸟,我遇到了一个我自己无法解决的问题,所以我试图在网上寻求帮助,但找不到任何解决方案。
我目前正在尝试在 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/