次のエラーが表示されます。
エラー: 型 'void *' から型 'struct sharedMem' に代入するときに互換性のない型です</p>
構造体を共有メモリにmmapしようとしたとき。これが私がやろうとしていることです:
//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 を試しましたが、葉巻は試しませんでした。