shmat() - 无效参数
shmat() - invalid argument
我在尝试读取 shmem 时遇到了一些问题。
写入数据的程序没有给我任何错误,所以我不知道该怎么做了。
typedef struct
{
long id;
} data;
data *dados[MAX];
int main()
{
key_t key = 5678;
int shmid;
if (shmid = shmget(key, MAX * sizeof(data),0666) < 0)
{
perror("shmget error");
return 1;
}
if((*dados = shmat(shmid,NULL,0)) == (void*) -1){
perror("shmat");
}
for (int i = 0; i < MAX; i++)
{
printf("time:%ld\n", dados[i]->id);
printf("passed %d",i);
}
return 0;
}
if (shmid = shmget(key, MAX * sizeof(data),0666) < 0)
根据 C operator order of precedence,<
运算符的优先级高于 =
运算符。因此,上面的代码实际上将布尔值 shmget(key, MAX * sizeof(data),0666) < 0
结果分配给了 shmid
.
使用显式包围以获得所需的结果:
if ((shmid = shmget(key, MAX * sizeof(data),0666)) < 0)
我在尝试读取 shmem 时遇到了一些问题。 写入数据的程序没有给我任何错误,所以我不知道该怎么做了。
typedef struct
{
long id;
} data;
data *dados[MAX];
int main()
{
key_t key = 5678;
int shmid;
if (shmid = shmget(key, MAX * sizeof(data),0666) < 0)
{
perror("shmget error");
return 1;
}
if((*dados = shmat(shmid,NULL,0)) == (void*) -1){
perror("shmat");
}
for (int i = 0; i < MAX; i++)
{
printf("time:%ld\n", dados[i]->id);
printf("passed %d",i);
}
return 0;
}
if (shmid = shmget(key, MAX * sizeof(data),0666) < 0)
根据 C operator order of precedence,<
运算符的优先级高于 =
运算符。因此,上面的代码实际上将布尔值 shmget(key, MAX * sizeof(data),0666) < 0
结果分配给了 shmid
.
使用显式包围以获得所需的结果:
if ((shmid = shmget(key, MAX * sizeof(data),0666)) < 0)