shared memory

 ( Safi | 2007. április 26., csütörtök - 16:44 )

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

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

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.

Köszi, mindjárt kiprobálom