Sdílená paměť programu

charlie

Sdílená paměť programu
« kdy: 07. 12. 2010, 11:03:08 »
Zdravim,
mam takto definovane struktury

Kód: [Vybrat]
typedef struct PLAYER {
    int id;
    int pid;
    char nick[10];
char ip[20];
    int chip_count;
    int card1;
    int card2;
    int is_in_game;
    int is_all_in;
    int bet;
    int winning;
    double comb_value;
} PLAYER;

typedef struct LIST {
struct PLAYER array[10];
} LIST;


zde se vytvori sdilena pamet

Kód: [Vybrat]

LIST *list;

/* Vytvořit sdílenou paměť */
    shmid = shmget(IPC_PRIVATE, sizeof(LIST), IPC_CREAT | SHM_R | SHM_W);
    if(shmid < 0) {
perror("shmget()");
exit(EXIT_FAILURE);
    }
    if((list = shmat(shmid, NULL, 0)) == (void *)-1) {
perror("shmat()");
exit(EXIT_FAILURE);
    }
    /* Vytvořit semafor */
    if((semid = semget(IPC_PRIVATE, 1, IPC_CREAT | SEM_R | SEM_A)) < 0) {
perror("semget()");
exit(EXIT_FAILURE);
    }
    /* Inicializovat semafor na hodnotu 1 (zámek odemčen) */
    union semun su;
    su.val = 1;
    if(semctl(semid, 0, SETVAL, su)) {
perror("semctl()");
exit(EXIT_FAILURE);
    }



mam fci, ktera mi vynuluje strukturu PLAYER. to aplikuji na cele pole array v strukture LIST a vytisknu.

Kód: [Vybrat]
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 

Po zapsani jednoho noveho prvku se ale zmeni i nektere jine atributy nekterych struktur.

Kód: [Vybrat]
ID: 123 nk: fsd pid: 6324 chps: 700 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: [b]6583142[/b]  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: [b]167772160[/b] chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0 
ID: 0 nk:  pid: 0 chps: 0 bet: 0 win: 0 c1: 0 c2: 0 AI: 0  IG: 0

Pripada mi to, jako by si neco do me pameti odkladalo data. Jak tomu zamezit ?
« Poslední změna: 07. 12. 2010, 11:08:14 od Petr Krčmář »


charlie

Re: Sdílená paměť programu
« Odpověď #1 kdy: 07. 12. 2010, 12:44:03 »
tak nic. Prisel jsem na to. Ma chyba. Omluvam se za spam. Moderatori....smazte to. diky.