C globale Variable bei mehreren C&H-Files

hell-student

Lieutenant
Registriert
Nov. 2007
Beiträge
671
Hallo Zusammen,

Ich habe gerade folgendes Problem. Ich möchte gerne von mehreren C-Files auf eine Variable zugreifen und diese z.b wenn vom Typ int inkrementieren. Problem dabei ist, dass ich nicht weis wo diese rein muss und ob als extern oder nicht. Mein Problem ist, dass wenn ich eine while(1) Schleife in die Main von Programm1 reinmache und per Konsole ausführe, in Programm2 eine Funktion ausführe, dass die Variable imkrementiert ich jedesmal nur 0 bekomme, statt 1,2,3.... Normal sollte doch, wenn ich die Variable im Programm1 implementiere hochgezählt werden. Der Printf Aufruf steckt direkt in der Funktion die vom Programm2 aufgerufen wird. Da ich mehrere Header-Files habe, wie schaffe ich es nun das die Variable global ist und nicht jeweil lokal? Vielleicht drück ich mich auch gerade etwas schlecht aus, sitze leider schon den ganzen Tach am PC =)

Es scheint mir so, als wäre bei jedem aufruf von Programm2 eine neue Instanz und deshalb immer der Startwert = 0

thx

Program1.c (Main) include global.h
Program1.h
global.h
global.c
lib.h include global.h
lib.c
Program2.c (Main) include lib.h
Program2.h
 
Startest du die beiden Programme unabhängig von einander? Dann ist das logisch: Jedes Programm bekommt seinen eigenen Speicherbereich. Und bei jedem Programmstart liegt das Programm woanders im RAM.
Um 2 Programme zum Kommunizieren zu bringen, solltest du auf eine vorgefertigte Lösung wie DBUS (unter linux) zurückgreifen. Alternativ kannst du natürlich eine Datei anlegen, die beide Programme verwenden (aufpassen beim Schreibzugriff ohne Locks). Oder du benutzt eine lokale Datenbank, die den simultanen Zugriff koordiniert.
 
global.h:
Code:
int abc;
Program1.h:
Code:
#include "global.h"

extern int abc;

edit: Gilt natürlich nur innerhalb einer Anwendung. Für den Austausch von zwei Programmen, musst du über einen geteilten Speicher gehen (Dateien o.ä. oder hier wurde es auch behandelt).
 
Zuletzt bearbeitet:
Danke für die Antworten

Eingentlich hab ich ja alles mal gelernt. Kommt davon, wenn man Stunden um Stunden nur vor der Röhre hengt. hmm nur dann dreh ich mich leider im Kreis. Ich wollte eigentlich mit der Variable verwenden um den key für das SharedMemory für mehrere Instanzen vom Programm2 unterschiedlich zu gestalten, sonst könnten alle mit gleichem key auf den selben SharedMemory zugreifen.

Eigentlich soll Programm1 dauerhaft laufen und wenn ein Programm2 gestartet wird und die Funktion aufruft, ein SharedMemory angelegt werden. Sobald Programm2 beendet soll der SharedMemory wieder gelöscht werden. Die Instanzen von Programm2 wissen aber nichts voneinander und könnten möglicherweise den selben Key verwenden. Daher wollte ich den von Programm1 inkrementieren, wenn jeweils eine neue Instanz von Programm2 sich meldet.

Edit:

Ich könnte ja aber auch beim Aufruf von Programm2 die Pid mitgeben, da diese ja unique ist und somit wären es immer unterschiedliche SharedMemory. Müsste eigentlich klappen.
 
Zuletzt bearbeitet:
Klingt für mich nach einer klassischen Client-Server Infrastruktur. Wenn alle P2 mit P1 verbunden sind, dann kann P1 alles was geshared werden soll verwalten. Ganz spontan könntest du das per TCP lösen ;-)
 
Zurück
Oben