System V IPC shmat: Permission denied

S

simonwiese

Grünschnabel
Hallo zusammen!

Ich will mithilfe von System V IPC einen shared Memory Bereich anlegen. Leider bekomme ich immer ein "Permission denied" wenn ich den Prozess als normalen Benutzer laufen lassen will.

Das Programm sieht im Grunde genommen wie folgt aus:

Code:
#include <iostream>
using namespace std;
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int main() {
	
	//generate magic key
	key_t key = ftok("/tmp", 434);

	cerr<<"Key: "<<(int)key<<endl;

	int shID=shmget(key, sizeof(double)*6, IPC_CREAT | IPC_EXCL);

	if (shID < 0) {
		cerr<<"Couldn't get shmID: "<<strerror(errno)<<endl;
	} else {
		cerr<<"shID: "<<shID<<endl;
		double *shm_angles= (double *)shmat(shID, NULL, SHM_R | SHM_W);

		if (shm_angles == (double *)-1) {
			cerr<<"Couldn't attach shared memory: "<<strerror(errno)<<endl;
		}
		shmctl(shID, IPC_RMID, 0);
	}

	

	return 0;
}

Ausgabe sieht dann zB mal so aus:
Key: 738287937
shID: 360449
Couldn't attach shared memory: Permission denied

Problem ist das shmat(...) immer ein "Permission denied" wirft (außer man ist superuser..). Ich habs schon mit verschiedenen Flags versucht und auch schon bei google danach gesucht find aber keine Lösung.

Weiß einer von euch wo mein Fehler ist oder warum ich nicht ausreichend rechte haben soll??

Danke im Voraus!

Simon


PS: Meine Quellen:
https://www-rz.uni-hohenheim.de/betriebssysteme/unix/books/galileocomputing_unix_guru/node393.html
http://www.informatik.uni-osnabrueck.de/um/95/95.3/bischof_ipc/bischof_ipc.html
 
Hallo Simon,

du musst beim Aufruf von shmget noch die Berechtigungen für das shared memory-Segment angeben, dann sollte es funktionieren.

Beispielsweise so, um dem Benutzer Lese- und Schreibzugriffe zu gewähren:
Code:
int shmid = shmget(key, size, IPC_CREAT | IPC_EXCL | 0600);

Gruß,
Philip
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

[C++] Socket Probleme mit Adresse...

kernel module?

Problem mit Prozessen

tilp lässt sich nicht installieren

Zurück
Oben