【发布时间】: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 = '*';
【问题讨论】:
-
如果没有看到显示问题的Minimal, Complete, and Verifiable example。
-
我们需要更多信息来帮助您。如果不向我们展示您的代码,老实说,您希望我们如何帮助您?请仔细阅读the help pages - 特别是"What topics can I ask about here?"、"What types of questions should I avoid asking?"、"How do I ask a good question?" 和"How to create a Minimal, Complete, and Verifiable example"。
-
我添加了将整数写入段的代码部分以及我调用 shmget() 的行
-
假设 ps 的类型为“char *”,那么您尝试的操作将不起作用。您不能在 char 中存储任意整数(只有 -128 到 +127 可以存储在有符号的 char 中)。
-
是的,是 char * 引起了问题,感谢您提供有关编程问题和本网站工作方式的信息/建议。如果可以的话,我会给你们一个 +1,但我不知道如何大声笑..