stdipc(3C) stdipc(3C)
NAME
stdipc: ftok - Standardpaket für Interprozeßkommunikation
SYNTAX
#include <sys/types.h>
#include <sys/ipc.h>
keyt ftok(const char *path, int id);
BESCHREIBUNG
Für jede Art von Interprozeßkommunikation muß der Benutzer einen
Schlüssel bereitstellen, der von den Systemaufrufen msgget(2),
semget(2) und shmget(2) zum Erhalt der Kennung für die Interprozeßkom-
munikation verwendet wird. Eine Möglichkeit, einen Schlüssel zu defi-
nieren, bietet die Funktion ftok(). Eine andere Möglichkeit für das
Erstellen von Schlüsseln besteht darin, die Projektnummer im höch-
stwertigen Byte abzuspeichern und den übrigen Teil für eine laufende
Nummer zu verwenden. Es gibt viele weitere Möglichkeiten zum Aufbauen
von Schlüsseln, jedoch ist es notwendig, daß jedes System bestimmte
Normen für deren Bildung festlegt. Wenn eine bestimmte Norm hierfür
nicht eingehalten wird, besteht die Gefahr, daß nicht zugehörige Pro-
zesse unbeabsichtigt den Ablauf anderer Prozesse stören. Bei allen
Arten der Schlüsselbestimmung ist es immer noch möglich, daß zwei Pro-
zesse zufällig den gleichen Schlüssel benutzen. Achten Sie daher dar-
auf, daß das höchstwertige Byte eines Schlüssels auf irgendeine Weise
auf ein Projekt verweist, so daß die Schlüssel nicht innerhalb eines
Systems in Konflikt geraten.
ftok() gibt einen Schlüssel zurück, der auf path und id basiert und
der in nachfolgenden Systemaufrufen msgget(), semget() und shmget()
verwendet werden kann. path muß der Pfadname einer bestehenden Datei
sein, auf die der Prozeß zugreifen kann. id ist ein Zeichen, das ein
Projekt eindeutig kennzeichnet. Beachten Sie, daß ftok() für Dateien,
die Verweise sind, den gleichen Schlüssel zurückgibt, wenn es mit der
gleichen Kennung id aufgerufen wird, und daß es andere Schlüssel
zurückgibt, wenn es mit demselben Dateinamen, jedoch mit anderen Ken-
nungen id aufgerufen wird.
Der Schlüssel setzt sich zusammen aus id, der Minor-Nummer [vgl.
makedev(3C)] und dem I-Node von path. Nur die niederwertigen 8 Bits
von id und der Minor-Nummer sind signifikant. Vom I-Node sind nur die
16 niederwertigen Bits signifikant. Das Verhalten von ftok() ist unbe-
stimmt, wenn diese Bits 0 sind.
ERGEBNIS
ftok() gibt (keyt)-1 zurück, wenn path nicht vorhanden ist, oder wenn
der Prozeß nicht darauf zugreifen kann.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
stdipc(3C) stdipc(3C)
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion ftok() schlägt bei folgenden Bedingungen fehl:
EACCES Für eine Komponente des Pfadpräfixes wird die Suchbe-
rechtigung verweigert.
ELOOP Es wurden zu viele symbolische Links beim Auflösen von
path gefunden.
ENAMETOOLONG Die Länge des Arguments path überschreitet PATHMAX,
oder eine Komponente des Pfadnamens ist länger als
NAMEMAX.
ENOENT Eine Komponente von path gibt eine nicht vorhandene
Datei an, oder path ist eine leere Zeichenkette.
ENOTDIR Eine Komponente des Pfads ist kein Verzeichnis.
Die Funktion ftok() kann bei folgender Bedingung fehlschlagen:
ENAMETOOLONG Die Auflösung des Pfadnamens eines symbolischen Links
hat ein Zwischenergebnis erzeugt, dessen Länge PATHMAX
überschreitet.
HINWEISE
Wenn die Datei entfernt wird, deren Pfad an ftok() weitergereicht
wurde, während die Schlüssel weiterhin auf diese Datei verweisen, wird
bei späteren Aufrufen von ftok() mit gleichem path und id ein Fehler
ausgegeben. Wenn dieselbe Datei wieder erstellt wird, gibt ftok()
wahrscheinlich einen anderen Schlüssel als bei dem ursprünglichen Auf-
ruf zurück.
SIEHE AUCH
msgget(2), semget(2), shmget(2), stat(2), makedev(3C), ipc(5),
types(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98