【问题标题】:mmap and struct (incompatible type error struct to void *)mmap 和结构(不兼容的类型错误结构到 void *)
【发布时间】:2013-05-08 15:17:11
【问题描述】:

我收到此错误:

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

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

//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;

}

谁能告诉我我做错了什么? 我认为必须分配属性球员和桌卡,所以我尝试了 malloc 但没有雪茄。

【问题讨论】:

    标签: c struct mmap


    【解决方案1】:

    你想要一个指向struct sharedMem指针

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

    fire up the docs 的时间到 mmap() 的时间。

    【讨论】:

      【解决方案2】:
      void *mmap(void *addr, size_t len, int prot, int flags,
             int fildes, off_t off);
      

      mmap 返回一个 void 指针,而您正试图在结构中收集它。因此,在将它分配给 sharedMem* 之前,在 (struct sharedMem*) 中创建一个结构 sharedMem* 和类型转换 mmap。

      【讨论】:

        猜你喜欢
        • 2018-09-02
        • 2020-01-10
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 2018-09-11
        相关资源
        最近更新 更多