IPC, sdilena pamet meyi procesy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

IPC, sdilena pamet meyi procesy – C / C++ – Fórum – Programujte.comIPC, sdilena pamet meyi procesy – C / C++ – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
10. 1. 2012   #1
-
0
-

Ahoj,

 vytvarim procesy a nasdilele jsem si kus strukturu.

typedef struct buffer {
	int numberOfFullBaskets;
	int size;
	int currentIndex;
	char * myArray[NB];
};

buffer *myBuffer;

...

int shmId = shmget(IPC_PRIVATE, sizeof(buffer), IPC_CREAT|0666);
myBuffer = (buffer*) shmat(shmId, 0, 0);

...
myBuffer->size = 0;
myBuffer->numberOfFullBaskets = 0;
myBuffer->currentIndex = 0;

Vsechny procesy mohou cisty promene size, numberOfFullBaskets, currentIndex... problem mam se s polem pointeru char * myArray[NB]. 

Pokud v procesu pouziju tento zapis, tak si vsechny podprocesy mohou precit hodnotu na danem indexu. Tento zapis funguje dle ocekavani.

myBuffer->myArray[myBuffer->currentIndex] = "Moje hodnota";

jen bych k retezci "Moje hodnota" potreboval pridat hodnotu promene. Treba hodnotu iteratoru (int). Toto uz nefunguje. Dojde k jeho preruseni, kompilace probehne ale v poradku.

string message = "Hodnota indexu: " + to_string(i);

strcpy(myBuffer->myArray[myBuffer->currentIndex], message.c_str());

Nevite, jak k retezci "Moje hodnota" pridat jednodusse hodnotu promenne i? Diky

Nahlásit jako SPAM
IP: 193.48.172.–
liborb
~ Redaktor
+18
Guru
10. 1. 2012   #2
-
0
-

Jestli to dobře vidím, tak máš pole pointerů a jeden z nich nastavíš na nějaký konstantní řetězec, který jistě neleží ve sdílené části. No a následně se tuto konstantu snažíš modifikovat? Možná to jen na mobilní verzi špatně louskám :$

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.211.–
Martin
~ Anonymní uživatel
1602 příspěvků
10. 1. 2012   #3
-
0
-

Vicemene je to tak. Mam pole pointeru. V podprocesu jeden z nich nastavim na konstantni retezec. Tento retezec je dostupny v hlavnim procesu, ve kterem vytvarim podprocesy. 

Pri nastavovani konstantniho retezce bych rad pripojil jeste nejaky integer. 

Nahlásit jako SPAM
IP: 193.48.172.–
Martin
~ Anonymní uživatel
1602 příspěvků
10. 1. 2012   #4
-
0
-

Zkousel jsem toto reseni

typedef struct buffer {
	int numberOfFullBaskets;
	int size;
	int currentIndex;
	char myArray[NB][255];
};

string message = "Moje hodnota" + to_string(i);

strcpy(myBuffer->myArray[myBuffer->currentIndex], message.c_str());

a to se zda byt funkcni. jen jsem neporozuměl proč konstatní řetězec byl dostupný v hlavním procesu. 

Nahlásit jako SPAM
IP: 193.48.172.–
liborb
~ Redaktor
+18
Guru
10. 1. 2012   #5
-
0
-

Hmmm ... proč si pro tu strukturu vytvořil sdílenou paměť? Aby k ní mohly všechny procesy. A pak máš další paměť, ke které mají mít přístup opět všechny procesy (tím myslím paměť pro řetězec), a tu už nemáš sdílenou. Ale asi by si měl, ne? Prostě ti tam vůbec chybí nějaká alokace paměti pro řetězec a následně můžeš řetězec formátovat funkcemi k tomu určenými (nejspíš by si vystačil i s sprintf).

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.211.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 96 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý