Hello!
Az lenne a problémám hogy ha két proccess között osztott memoriát szeretnék használni, és addig jó a program amíg a mérete 1024 byte alatt van, de ha annál nagyobb akkor az shmget() függvény " Invalid argument" -el elszáll. Probáltam nézegetni a limiteket, hogy max mekkora méretű memoriát foglalhatok le így, de ezek a számok jóval nagyobbak mint 1024 byte. A /proc/sys/kernel/shmmax sokkal nagyobb mint 1024 és ha kilistázom ipcs-el a már meglévő osztott memoriákat ott is sokkal nagyobb méretű területeket használnak a programok.
Így probáltam osztott memoriát foglalni:
key_t key_sm;
int shmid;
char* shared_data;
...
key_sm = ftok("//home//tamas//szuro.pdf", 's');
if ((shmid = shmget(key_sm, 2* 1024, 0666 | IPC_CREAT | IPC_EXCL)) < 0)
{
perror("Shared mem creation error:");
if ((shmid = shmget(key_sm, 2 * 1024, 0666)) < 0)
{
perror("mem");
exit(1);
}
}
shared_data = shmat(shmid, (void *) 0, 0);
Előre is kösz
- 1333 megtekintés
Hozzászólások
hali
azert kapsz invalid argument hibauzenetet, mert nem azonos az osztott memoria merete, amit hasznalni szeretnel azzal a merettel, amit letrehozaskor megadtal
gondolom eloszor letrehoztad 1024 byte-osra, atirtad a kodban
2048-ra, forditottal, elinditottad a progit, es jott a hibauzenet.
proballd ki ugy, hogy az ftok fuggvenyben mas parametereket hasznalsz
szerk: vagy szuntesd meg az osztott memoriat
bye
/* bocs az esetleges helyesirasi hidakert */
- A hozzászóláshoz be kell jelentkezni
Igen ez lehet a helyzet.
Osztott memóriás proginál általában van egy processz, aki először elindul és alapból a shared memory szegmens felszabadításával kezdi, majd újra létrehozza. Leállításkor is szokás a fő processznek felszabadítani.
- A hozzászóláshoz be kell jelentkezni
Köszi, mindjárt kiprobálom
- A hozzászóláshoz be kell jelentkezni