catopen(3C) catopen(3C)
NAME
catopen, catclose - Meldungskatalog öffnen und schließen
SYNTAX
#include <nltypes.h>
nlcatd catopen(const char *name, int oflag);
int catclose(nlcatd catd);
BESCHREIBUNG
catopen() öffnet ein Verzeichnis mit Meldungen und liefert einen Ver-
zeichnisdeskriptor zurück. name gibt den Namen des zu verwendenden
Meldungskatalogs an, der geöffnet werden soll. Wenn name einen Schräg-
strich / enthält, dann gibt name den Pfadnamen für einen Meldungskata-
log an. Ansonsten wird die Umgebungsvariable NLSPATH verwendet. Wenn
NLSPATH in der Umgebung nicht existiert oder der Meldungskatalog unter
einem in NLSPATH definierten Pfad nicht geöffnet werden kann, wird der
voreingestellte Pfad verwendet [siehe nltypes(5)]. Wenn oflag den
Wert NLCATLOCALE hat, kann sich dadurch die Einstellung von
LCMESSAGES ändern. Wenn oflag 0 ist, kann das Auswirkungen auf die
Umgebungsvariable LANG haben.
Der Deskriptor eines Meldungskatalogs bleibt in einem Prozeß so lange
gültig, bis der Prozeß oder ein erfolgreicher Aufruf einer der exec-
Funktionen ihn schließt. Eine Änderung in der Einstellung der Katego-
rie LCMESSAGES setzt die existierenden offenen Kataloge außer Kraft.
Die Namen der Meldungskataloge und ihre Positionen auf dem Speicherme-
dium sind je nach System verschieden. Einzelne Anwendungen können Mel-
dungskataloge nach eigenen Gesichtspunkten benennen und anlegen. Daher
wird ein Mechanismus benötigt, der genau angibt, wo sich der Meldungs-
katalog befindet.
Die Variable NLSPATH liefert sowohl die Position von Meldungskatalogen
in der Form eines Suchpfads, als auch die Namenskonventionen, die mit
den Meldungskatalogen verknüpft sind. Zum Beispiel:
NLSPATH=/nlslib/%L/%N.cat:/nlslib/%N/%L
Das Metazeichen % zeigt ein Substitutionsfeld an, wobei %L die aktu-
elle Einstellung der Umgebungsvariablen LANG (siehe folgenden
Abschnitt) ersetzt und %N den Wert des Parameters name ersetzt, der an
catopen() übergeben wird. Im obigen Beispiel sucht catopen() daher
zuerst in /nlslib/$LANG/name.cat und dann in /nlslib/name/$LANG nach
dem angegebenen Meldungskatalog.
NLSPATH wird üblicherweise systemweit eingestellt (z. B. in
/etc/profile) und macht daher die Positionierungs- und Namenskonven-
tionen für die Meldungskataloge sowohl für die Programme als auch die
Benutzer transparent.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
catopen(3C) catopen(3C)
Der komplette Satz der Metazeichen umfaßt folgende Symbole:
%N Wert des Namensparameters, der an catopen() übergeben wird
%L Wert von LANG
%l Wert des Sprachenelements aus LANG
%t Wert des Landelements aus LANG
%c Wert des Zeichensatzelements aus LANG
%% das Zeichen %
Die Umgebungsvariable LANG bietet die Möglichkeit, die Muttersprache,
lokale Besonderheiten und den Zeichensatz des Benutzers in Form einer
ASCII-Zeichenkette anzugeben:
LANG=language[_territory[.codeset]]
Ein Benutzer aus Österreich, der Deutsch spricht und ein Terminal mit
dem Zeichensatz ISO 8859/1 verwendet, stellt die Variable LANG auf den
folgenden Wert:
LANG=DeA.88591
Auf diese Weise sollte es einem Benutzer möglich sein, entsprechende
relevante Meldungskataloge zu finden, vorausgesetzt, sie existieren.
Sollte die Variable LANG nicht gesetzt sein, dann wird der Wert von
LCMESSAGES verwendet, wie er von setlocale() zurückgeliefert wird.
Ist dieser Wert NULL, dann wird der voreingestellte Pfad verwendet,
der in nltypes definiert wird.
Wenn oflag den Wert 0 hat, wird die Umgebungsvariable LANG zur Lokali-
sierung des Meldungskatalogs verwendet, ohne Berücksichtigung der
Kategorie LCMESSAGES. Wenn oflag den Wert NLCATLOCALE hat, wird
LCMESSAGES zur Lokalisierung des Meldungskatalogs verwendet.
catclose() schließt den Meldungskatalog catd.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion catopen() kann bei folgenden Bedingungen fehlschlagen:
EACCES Für die Komponente des Pfads zum Meldungskatalog wird
die Suchberechtigung verweigert, oder für den Mel-
dungskatalog wird die Schreibberechtigung verweigert.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
catopen(3C) catopen(3C)
EMFILE Im aufrufenden Prozeß sind zur Zeit die über OPENMAX
festgelegte maximale Anzahl Dateideskriptoren geöff-
net.
ENAMETOOLONG Die Länge des Pfadnamens für den Meldungskatalog über-
schreitet PATHMAX, oder eine Komponente des Pfadnames
ist länger als NAMEMAX.
ENAMETOOLONG Die Auflösung des Pfadnamens eines symbolischen Links
hat ein Zwischenergebnis erzeugt, dessen Länge
PATHMAX überschreitet.
ENFILE Es sind zu viele Dateien im System geöffnet.
ENOENT Der Meldungskatalog ist nicht vorhanden, oder das
Argument name zeigt auf eine leere Zeichenkette.
ENOMEM Es ist nicht genügend Speicherplatz verfügbar.
ENOTDIR Eine Komponente des Pfads zum Meldungskatalog ist kein
Verzeichnis. Die Funktion catclose() kann bei folgen-
den Bedingungen fehlschlagen:
EBADF Der Katalogdeskriptor ist ungültig.
EINTR Die Funktion catclose() wurde durch ein Signal unter-
brochen.
ERGEBNIS
Bei Erfolg liefert catopen() einen Deskriptor für den Meldungskatalog
zurück, welcher beim späteren Aufruf von catgets() und catclose() ver-
wendet werden kann. Ansonsten liefert catopen() den Wert (nlcatd)-1
zurück.
catclose() liefert bei Erfolg 0 zurück; tritt ein Fehler auf, wird -1
zurückgegeben.
HINWEISE
Einige Implementierungen von catopen() verwenden malloc(), um internen
Pufferbereichen Speicherplatz zuzuweisen. Die Funktion catopen()
schlägt möglicherweise fehl, wenn zur Aufnahme dieser Puffer nicht
genügend Speicherplatz verfügbar ist.
Deskriptoren von Meldungskatalogen sind nach dem Aufruf einer der
exec-Funktionen nicht mehr gültig.
Anwendungsentwickler sollten sich darüber im Klaren sein, daß bisher
noch keine Richtlinien für die Position von Meldungskatalogen ausgear-
beitet wurden. Daher sollte darauf geachtet werden, daß Konflikte mit
Katalogen vermieden werden, die von anderen Anwendungen und den Stan-
darddienstprogrammen verwendet werden.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
catopen(3C) catopen(3C)
SIEHE AUCH
catgets(3C), setlocale(3C), environ(5), fcntl(5), nltypes(5).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98