Permalänk
Medlem

Cpp hjälp och råd

Jag har nyligen börjat sätta mig in lite i cpp programering eftersom jag eventuellt ser vissa behov av det i framtiden.
Just nu skulle jag ha lite nytta av ett "program"/sätt att kunna hålla information i datorns minne som jag kan kalla på när det behövs från en annan process. Alltså så som jag lite visionerar det är att man har en process som processerar och håller data i minnet. Och via en annan process så kan man ge data åt första processen som behandlar det och skickar öskad data till andra processen.
Just nu sköter jag detta genom att skriva ner till en fil på hårddisken. inte för att det är ett väldigt belastat system, men det vore intressant att kunna få detta överflyttat till att helt och hållet finnas i datorns minne iställe för i filer. datan som första programmet skall behandla och lagra är inte viktig att den finns kvar ifall systemet går ner eftersom den data enbart behövs så länge systemet körs. Vid nästa start måste ändå datan "byggas pånytt".

Frågan är då, hur kan jag skapa dessa program så att det ena körs i bakgrunden, och handhar minnet men kan kommunicera med det andra programmet. Så att det andra programmet kan skicka data åt första och sedan få data tillbaks som går till output på önskat sätt?

Hoppas någon uppfattar vart jag skulle vilja komma och har några vinkar eller länkar till hur det eventuellt skulle göras. Skulle gärna få det gjort i linux och med c++.

Permalänk
Medlem

Det du beskriver kallas för "Interprocess communication" förkortat IPC.

I linux kan du använda mmap för att åstadkomma det. Kolla manpages på mmap eller wikipedia de har ett exempel också http://en.wikipedia.org/wiki/Mmap

Permalänk
Inaktiv

Du vill alltså ha en daemon/server-process, och en klient-process? Det är väldigt vanligt i Linux. Jag hade definitivt kör på sockets för detta, dvs dela data genom nätverket. Det är en ganska dålig idé att bara dela minnesaddresser, tycker du ska låta daemonen hantera all data i minnet själv, och sen skicka data till alla klienter istället via nätverket.

På så sätt kan du även köra en dedikerad server för vad du nu ska grejja med, om det blir aktuellt i framtiden

Kolla upp om hur du skapar daemons till systemd/initscripts om du vill kunna styra din daemon via tjänstehanteraren också.

Permalänk
Medlem

Svårt att ge dig ett bra svar när man inte vet vad dina program gör. De enklaste sättet är väll att starta en ram-disk.

Permalänk
Medlem
Skrivet av lz.:

Det du beskriver kallas för "Interprocess communication" förkortat IPC.

I linux kan du använda mmap för att åstadkomma det. Kolla manpages på mmap eller wikipedia de har ett exempel också http://en.wikipedia.org/wiki/Mmap

Tack, jag hittade något om IPC tidigare, men jag fick inte riktigt klart för mig exakt vad det var som hände. Men jag skall läsa vidare på din wiki-länk och se om jag får mera ut av det hela.

Skrivet av anon214934:

Du vill alltså ha en daemon/server-process, och en klient-process? Det är väldigt vanligt i Linux. Jag hade definitivt kör på sockets för detta, dvs dela data genom nätverket. Det är en ganska dålig idé att bara dela minnesaddresser, tycker du ska låta daemonen hantera all data i minnet själv, och sen skicka data till alla klienter istället via nätverket.

På så sätt kan du även köra en dedikerad server för vad du nu ska grejja med, om det blir aktuellt i framtiden

Kolla upp om hur du skapar daemons till systemd/initscripts om du vill kunna styra din daemon via tjänstehanteraren också.

Jag hade inte tänkt dela minnesadress egentligen, utan skulle vilja ha typ en deamon/server som sköter vad som finns i minnet och övriga tar kontakt till deamon/servern för att ändra eller få data från minnesplatsen. Jag är dock inte säker på att jag vill öppna en port till nätverket för att få internkommunikation på datorn.

Skrivet av w4nt3n:

Svårt att ge dig ett bra svar när man inte vet vad dina program gör. De enklaste sättet är väll att starta en ram-disk.

Programmet skall enbart hålla reda på en ordningsföljd. Men ordningsföljden skall kunna ändras av flere olika.
Jag söker inte det enklaste sättet, utan skulle vilja gå ur detta problem en kunskap rikare. Jag vet nog hur jag får jobbet gjort "the dirty way", men jag skulle vilja ha ett lite mjukare och systemvänligare sätt att hantera det. Även om det inte är viktigt egentligen för just denna process, så kan det vara bra att ha kännedom om hur det fungerar.

Permalänk
Inaktiv
Citat:

Jag hade inte tänkt dela minnesadress egentligen, utan skulle vilja ha typ en deamon/server som sköter vad som finns i minnet och övriga tar kontakt till deamon/servern för att ändra eller få data från minnesplatsen.

Vill du inte dela minnesaddresser så är det inte den typen av IPC du vill ha.

Citat:

Jag är dock inte säker på att jag vill öppna en port till nätverket för att få internkommunikation på datorn.

Det är såhär majoriteten av daemons till Linux fungerar. Jag tror att du behöver ett färskt perspektiv på ditt problem.

Permalänk
Medlem
Skrivet av w4nt3n:

Svårt att ge dig ett bra svar när man inte vet vad dina program gör. De enklaste sättet är väll att starta en ram-disk.

För att bättre beskriva hur det är jag tänkt. Låt oss säga att programmet redan har en kö med numrorna, 5, 7 ,11, 3. Om jag begär att få kön får jag den i just den ordningen som jag skrev. Om någon annan lägger till nummer 15 så kommer den längst bak i ordningen. och samtidigt tar jag bort första i ordningen men lägger till numret 4. Dvs om jag nu begär ordningen så får jag 7 ,11, 3, 15, 4.

Permalänk
Medlem
Skrivet av anon214934:

Vill du inte dela minnesaddresser så är det inte den typen av IPC du vill ha.

Det är såhär majoriteten av daemons till Linux fungerar. Jag tror att du behöver ett färskt perspektiv på ditt problem.

Allright, så du menar alltså att om jag inte väljer att dela minnesadress så är bästa alternativet att kommunicera enbart via nätverket?
Jag har provat på att skicka och ta emot data via nätverk, så jag har en aning om hur det görs.

Permalänk
Medlem

Varför har du valt att dela upp det i två program?

Permalänk
Medlem
Skrivet av w4nt3n:

Varför har du valt att dela upp det i två program?

För att flere skulle ha möjligheten att söka och skicka data för lagringen i minnet.

Permalänk
Medlem

flera på samma dator eller olika?

Permalänk
Medlem
Skrivet av w4nt3n:

flera på samma dator eller olika?

Till en början är det främst på samma dator, men planer är nog att i framtiden kunna även ta emot från andra datorer också.

Permalänk
Medlem

Tack, då är det Sockets som gäller