update variable vanuit ander programma

Status
Niet open voor verdere reacties.

dj technics

Gebruiker
Lid geworden
1 sep 2007
Berichten
367
Hoi gasten,

Ik ben tamelijk nieuw in CPP (heb meer ervaring in de webwereld .. php, javascript, ...) en heb een probleem waar ik maar geen antwoord op vind. Ik verwacht niet meteen een kant-en-klaar antwoord maar moest iemand mij verder opweg kunnen zetten met google zou ik al dol gelukkig zijn. Mijn eigen google zoektocht zit na 3 dagen muurvast.

Dus, ik zou twee programmatjes moeten hebben ... een input en een output .. De input file zou twee variabele in de output file moeten kunnen updaten. Een simpel voorbeeld van wat ik zou nodig hebben ..

output.cpp
Code:
main(){
   bool change = false;
   int content;

   while( true ){
      if( change ){
         cout << "changed " << content << endl;
      } else {
         cout << "no change" << endl;
         usleep( 5000 );
      }
   }

   return 0;
}

input.cpp
Code:
main( int argc, char** argv ){
   bool change = true; //refererend aan de variable in output.cpp
   int content = argv[1];

   return 0;
}

Heb al 1001 dingen geprobeerd maar ik vind helemaal niks dat werkt. Zelfs al zet ik dit in dezelfde file en run deze een tweede keer om te updaten gebeurd er helemaal niks.

Mijn google zoektoch zit volledig vast. Ik heb "een (werkende) oplossing" uitgewerkt via mysql maar de SD kaart van mijn raspberry pi loopt warm van twee mysql calls per seconde + de web requests die aan dit project te pas komen. De CPU komt niet boven de 2% maar het systeem crashed na 10 minuten met een gloeiend hete SD kaart.

Alvast bedankt voor de hulp
 
Laatst bewerkt:
A) waarom geen python? ligt veel dichter op je huidige ervaring dan een van de moeilijkste talen die er zijn
B) wat je zoekt is waarschijnlijk een "named pipe"

De reden dat het niet werkt is een principe genaamd "scope". Een variabele is eigendom van het deel van het programma dat het declareert.

bijvoorbeeld als je dit doet:
Code:
void main ()
{
  a=10;
  subr();
  cout << a;
}
void subr()
{
  a=20;
}

dan is het antwoord "10". De verandering van "a=20" in de subroutine is in de locale "scope" van de subroutine. zodra je de subroutine verlaat wordt de verandering van 'a' weggegooid en komt de scope van main weer terug en is a nog steeds 10. Hetzelfde geldt natuurlijk tussen programma's. tenzij je een "permanent" mechanisme afspreekt dat beide partijen kunnen gebruiken. SQL is een (zeer zware) mogelijkheid. named pipes is in linux waarschijnlijk de beste oplossing, maar ik heb alleen het kleine stukje code dat je nu laat zien natuurlijk.

Direct pipes / sockets / membuf etc etc. zijn allemaal andere mogelijke technieken die linux biedt voor tijdelijke en async operaties, maar de juiste keuze is een beetje afhankelijk van hoe tijdscritisch etc het allemaal moet zijn.

zie bijv. https://www.networkworld.com/article/3251853/linux/why-use-named-pipes-on-linux.html
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan