c - mmap 和 struct(类型错误 struct 与 void * 不兼容)

标签 c struct mmap

我收到此错误:

错误:从类型“void *”分配给类型“struct shareMem”时,类型不兼容

当尝试将结构映射到共享内存时。这就是我正在尝试做的事情:

//struct for each card
typedef struct card{
    char c[3]; //card
    char s; //suit
} card;

//struct with player information
typedef struct player{
    int num;
    char* nickname;
    char* FIFO_P;
    struct card* hand;
} player;

//struct for sharedMemory
typedef struct sharedMem{
    unsigned int nplayers;
    unsigned int dealer;
    struct player *players;
    unsigned int roundnumber;
    unsigned int turn;
    struct card *tablecards;
} sharedMem;

然后我有一个函数可以:

int createSharedMemory(char* shmname,int nplayers){

    int shmfd;
    char SHMNAME[100]={'\0'};
    char *ps;
    ps=&SHMNAME[0];
    strcat(ps,"/");
    strcat(ps,shmname); // name = /shmname
    shmfd = shm_open(SHMNAME,O_RDWR,0755);
    if (shmfd<0){
        if (errno==2){ //File or directory does not exist (shared memory space not created, meaning it's the first process, create the SHMSpace)
            shmfd = shm_open(SHMNAME,O_CREAT|O_RDWR,0755);
            if (shmfd<0){
                perror("Failure in shm_open()");
                fprintf(stderr,"Error: %d\n",errno);
                exit(EXIT_FAILURE);             
            }
        } else {
            perror("Failure in shm_open()");
            fprintf(stderr,"Error: %d\n",errno);
            exit(EXIT_FAILURE);
        }
    }

    struct sharedMem shm;
//  shm.players=malloc(nplayers*sizeof(player));
//  shm.tablecards=malloc(nplayers*sizeof(card));
    ftruncate(shmfd, sizeof(sharedMem));

错误:shm = mmap(0,sizeof(sharedMem),PROT_READ|PROT_WRITE,MAP_SHARED,shmfd,0);

    return 0;

}

有人可以告诉我我做错了什么吗? 我认为必须分配属性玩家和 table 卡,所以我尝试了 malloc,但没有雪茄。

最佳答案

您想要一个指向struct sharedMem指针:

struct sharedMem *shmem = mmap(...);

时间到fire up the docs mmap()

关于c - mmap 和 struct(类型错误 struct 与 void * 不兼容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16541534/

相关文章:

c - C 中的下标数组

c - 如何获取结构体的结构信息

c - 循环中的文件 mmap

c++ - mmap分配的是页面还是页面的一部分?

c - 如何将标记化行与 str "exit"进行比较?

c - 如何使用 Boehm GC 实现弱引用?

c - 这里的代码片段有语法错误吗?

ios - 定义结构时的错误信息

c - 以 int 指针 * 作为参数并返回结构体的函数。在struct struct*中存储数据并打印结果

c - mmap 或 malloc 是否分配 RAM?