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)