C Pointer per Pipe an anderen Task senden - IPC - Speicherzugriffschutz - Linux

hell-student

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

so wie ich das sehe sind Pointer ja nichts anderes wie Zeiger auf Speicheradressen. Ich glaube aber der Knackpunkt ist der Speicherschutz. Ich würde gerne, damit ich nicht soviel senden muss per Pipe zwischen 2 Prozessen statt einer Nachricht (die ich sowohl auf Sender Seite zusammen setzten muss, als auch auf Empfänger seite wieder decodieren muss) einfach einen Pointer auf den Speicherbereich senden. Jedoch denkle ich wird das nicht klappen, da ja andere Tasks nicht auf den Speicherbereich von anderen Tasks zugreifen dürfen.

Also so irgendwie


Code:
Task A
int s;
s = 10;
char msg[100];
sprintf(msg, "%p", &s);
write(pipe, msg, sizeof(msg));

In Task B dann die Adresse die gesendet wurde einem Pointer zuweisen und benutzen. Dies spricht jedoch leider gegen Speicherzugriffschutz oder irre ich mich da. thx
 
Du hast vollkommen Recht, das ganze wird nicht funktionieren ;) Du könntest aber Shared Memory erzeugen, damit sollte es möglich sein. Google sollte dir da eine Fülle an Informationen liefern.
 
Problem bei SM ist leider, dass ich mehrere Tasks habe die darauf zugreifen können und ich den somit locken müsste von den Tasks - da diese jedoch möglicherweise (durch Programmierfehler) abstürzen könnten, würde der SM gelockt sein und andere Tasks könnten nicht mehr darauf zugreifen. Daher habe ich eine Pipe genommen.
 
Shared Memory anlegen und per Semaphore schützen. Stürzt ein Prozess ab, sollte das jeweilige Handle vom Betriebssystem freigegeben werden. Besser wärs aber wenn er nicht abtstürzt ;-)
Pointer aus dem Heap des jeweiligen Prozesses gehen ins leere wenn ein anderer Prozess diesen verwenden möchte.

Anmerkung: Den echten Schutz per Semaphore benötigst du eigentlich nur für Schreibzugriffe. Wollen die Prozesse nur aus dem SM lesen gehts auch ohne, du musst nur den Initialzustand synchronisieren.
 
Stürzt ein Prozess ab, sollte das jeweilige Handle vom Betriebssystem freigegeben werden

hast du dazu einen Link? Ist das immer so?
 
Du kannst evtl. statt Locks Leases verwenden. Die muss sich der Prozess im kritischen Abschnitt aktiv immer wieder holen, solange er exklusiven Zugriff braucht. Dafür laufen die eben ganz automatisch ab, falls der Prozess abraucht.
 
Danke, das werd ich mir mal anschauen
 

Ähnliche Themen

Zurück
Oben