Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

creat, creat64 - neue Datei erzeugen oder vorhandene überschreiben

&pagelevel(4)&pagelevel

Definition

#include <fcntl.h>

Optional
#include <sys/types.h>
#include <sys/stat.h> (Ende)

int creat(const char *path, mode_t mode);
int creat64(const char *path, mode_t mode);

BS2000
int creat(const char *path, int mode);
int creat64(const char *path, int mode); (Ende)

Beschreibung

Wenn POSIX-Dateien erzeugt werden, verhält sich die Funktion XPG-konform wie folgt:

creat() erstellt eine neue Datei oder bereitet eine vorhandene Datei vor, neu beschrieben zu werden. Die Datei wird durch den Pfadnamen angegeben, auf den path zeigt.

Wenn die Datei vorhanden ist, wird ihre Länge auf 0 abgeschnitten; Modus und Eigentümer bleiben unverändert.

Wenn die Datei nicht existiert, wird die Datei-Eigentümernummer auf die effektive Benutzernummer des Prozesses gesetzt. Die Gruppennummer der Datei wird auf die effektive Gruppennummer des Prozesses gesetzt; wenn aber das S_ISGID-Bit im übergeordneten Verzeichnis gesetzt ist, dann wird die Gruppennummer der Datei vom übergeordneten Verzeichnis geerbt. Die Zugriffserlaubnis-Bits des Dateimodus werden auf den Wert von mode wie folgt geändert:

  • Wenn die Gruppennummer der neuen Datei nicht zur effektiven oder einer der zusätzlichen Gruppennummern passt, wird das S_ISGID-Bit gelöscht.
  • Alle Bits, die in der Dateityp-Erstellungsmaske des Prozesses gesetzt sind, werden gelöscht (siehe umask()).
  • Das Bit für die Sicherung des Textsegments nach der Ausführung wird gelöscht (siehe chmod()).

Der Aufruf creat( path, mode ) entspricht dem Aufruf von

open( path , O_WRONLY | O_CREAT | O_TRUNC, mode )

Es besteht kein funktionaler Unterschied zwischen creat() und creat64(), außer dass in der mit dem Filedescriptor verknüpften Dateibeschreibung das Kennzeichen für eine große Datei hinterlegt wird, dh. es wird das O_LARGEFILE Bit gesetzt. Es wird eine Dateikennzahl zurückgegeben, die dazu verwendet werden kann, die Datei über 2GB hinaus zu vergrößern.

BS2000
Wenn BS2000-Dateien erzeugt werden, ist Folgendes zu beachten:

path kann sein:

  • jeder gültige BS2000-Dateiname
  • "/BS2/link= linkname"
    linkname bezeichnet einen BS2000-Linknamen. (Ende)

mode:
In diesem Parameter werden nur der lbp-Schalter, der Nosplit-Schalter und die Angabe O_RECORD ausgewertet. Alle anderen Angaben in diesem Parameter werden ignoriert. Zur Erstellung von portierbaren Programmen ist mode jedoch notwendig, da damit im UNIX-Betriebssystem die Schutzbitvergabe geregelt wird.

lbp-Schalter

Der lbp-Schalter steuert die Behandlung des Last Byte Pointers (LBP). Er ist nur für Binärdateien mit Zugriffsart PAM relevant und kann mit jeder der oben angegebenen Konstanten kombiniert werden. Falls als lbp-Schalter O_LBP angegeben ist, wird geprüft, ob LBP-Unterstützung möglich ist. Ist dies nicht der Fall, so schlägt die Funktion creat(), creat64() fehl und errno wird auf ENOSYS gesetzt. Weitere Auswirkungen hat der Schalter erst, wenn die Datei geschlossen wird.

O_LBP

Beim Schließen einer Datei, die neu erstellt wurde, wird kein Marker geschrieben und ein gültiger LBP gesetzt.
Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.

O_NOLBP

Beim Schließen einer Datei, die neu erstellt wurde, wird der LBP auf Null (=ungültig) gesetzt. Es wird ein Marker geschrieben. Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.
Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt.

Wird der lbp-Schalter in beiden Varianten angegeben (O_LBP und O_NOLBP), so schlägt die Funktion creat(), creat64 fehl und errno wird auf EINVAL gesetzt.

Wird der lbp-Schalter nicht angegeben, hängt das Verhalten von der Umgebungsvariablen LAST_BYTE_POINTER ab (siehe auch Abschnitt "Umgebungsvariablen“ ):

LAST_BYTE_POINTER=YES

Die Funktion verhält sich so, als ob O_LBP angegeben wäre.

LAST_BYTE_POINTER=NO

Die Funktion verhält sich so, als ob O_NOLBP angegeben wäre.

Nosplit-Schalter

Dieser Schalter steuert die Verarbeitung von Textdateien mit der Zugriffsart SAM und variabler Satzlänge, wenn zusätzlich eine maximale Satzlänge angegeben ist. Er kann mit jeder der anderen Konstanten kombiniert werden.

O_NOSPLIT

Beim Schreiben mit write() werden Sätze, die länger als die maximale Satzlänge sind, auf die maximale Satzlänge gekürzt.

Ist der Schalter nicht angegeben, gilt beim Schreiben Folgendes:

Ein Satz, der länger als die maximale Satzlänge ist, wird in mehrere Sätze aufgeteilt. Hat ein Satz genau die maximale Satzlänge, wird nach diesem ein Satz der Länge Null geschrieben.

Zum Eröffnen von Dateien mit satzorientierter Ein-/Ausgabe (Satz-E/A) kann beim Parameter modus die Konstante O_RECORD angegeben werden. Sie kann grundsätzlich mit jeder anderen Konstanten außer O_LBP kombiniert werden.

O_RECORD

Dieser Schalter bewirkt Folgendes:

  • Die Funktion write() schreibt einen Satz in die Datei. Bei SAM- und PAM-Dateien wird der Satz an die aktuelle Dateiposition geschrieben. Bei ISAM-Dateien wird der Satz an die Position geschrieben, die dem Schlüsselwert im Satz entspricht. Ist die Anzahl n der zu schreibenden Zeichen größer als die maximale Satzlänge, wird nur ein Satz mit maximaler Satzlänge geschrieben. Die restlichen Daten gehen verloren. Bei ISAM-Dateien wird ein Satz nur geschrieben, wenn er mindestens einen vollständigen Schlüssel enthält. Ist bei Dateien mit fester Satzlänge n kleiner als die Satzlänge, wird mit binären Nullen aufgefüllt.
    Beim Update eines Satzes in einer SAM- oder PAM-Datei darf die Länge des Satzes nicht verändert werden. Die Funktion write() liefert auch bei Satz-E/A die Anzahl der tatsächlich geschriebenen Zeichen zurück.

Der BS2000-Dateiname bzw. -Linkname kann in Klein- und Großbuchstaben geschrieben werden, er wird automatisch in Großbuchstaben umgesetzt.

Wird eine nicht vorhandene Datei angelegt, wird standardmäßig folgende Datei erzeugt:Bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden) eine SAM-Datei mit variabler Satzlänge und Standardblocklänge, bei ANSI-Funktionalität eine ISAM-Datei mit variabler Satzlänge und Standardblocklänge.

Bei Verwendung eines Linknamens lassen sich mit dem ADD-FILE-LINK-Kommando folgende Dateiattribute ändern: Zugriffsmethode, Satzlänge, Satzformat, Blocklänge und Blockformat.
Wird eine bereits existierende Datei auf die Länge 0 verkürzt, bleiben die Katalogeigenschaften dieser Datei erhalten.

Es können maximal _NFILE Dateien gleichzeitig geöffnet sein. _NFILE ist in stdio.h mit 2048 definiert.

Returnwert

Dateideskriptor



bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. Es wird keine Datei geöffnet oder modifiziert.

Fehler

creat() schlägt fehl, wenn gilt:


EACCES

Eine Komponente des Pfades darf nicht durchsucht werden.

Die Datei ist nicht vorhanden, und das Dateiverzeichnis, in dem die Datei angelegt werden soll, lässt das Schreiben nicht zu.
Die Datei ist vorhanden, und die Schreiberlaubnis wird verweigert.


Erweiterung


EAGAIN

Die Datei ist vorhanden, obligatorisches Sperren von Dateien und Dateisätzen ist gesetzt, und in der Datei sind noch Dateisatzsperren vorhanden (siehe chmod()). (Ende)


EEXIST

O_CREAT und O_EXCL sind gesetzt, und der Dateiname existiert schon.


Erweiterung


EFAULT

path weist über den zugewiesenen Adressraum des Prozesses hinaus. (Ende)


EINTR

Ein Signal wurde während des Systemaufrufs creat() abgefangen.


EISDIR

Die angegebene Datei ist ein Dateiverzeichnis.


Erweiterung 


ELOOP

Während der Übersetzung von path waren zu viele symbolische Verweise vorhanden. (Ende)


EMFILE

Der Prozess hat zu viele Dateien geöffnet (siehe getrlimit()).


ENAMETOOLONG



Die Länge des path-Arguments überschreitet {PATH_MAX}, oder eine path-Komponente ist länger als {NAME_MAX}.

 

ENFILE

Die Systemdatei-Tabelle ist voll.

 

ENOENT

Eine Komponente des Pfadnamens existiert nicht, oder path zeigt auf eine leere Zeichenkette.

 

ENOSPC

Das Dateisystem hat keine Indexeinträge mehr.

 

ENOTDIR

Eine Komponente des Pfadnamens ist kein Dateiverzeichnis.

 

ENXIO

Die angegebene Datei ist eine Gerätedatei für ein zeichen- oder blockorientiertes Gerät, und das dieser Datei zugewiesene Gerät existiert nicht.

 

EROFS

Die angegebene Datei steht in einem schreibgeschützten Dateisystem.

 

ETXTBSY

Die Datei ist eine reine Programmdatei, die gerade ausgeführt wird.

Hinweis

Ob eine BS2000- oder eine POSIX-Datei erzeugt wird, hängt von der Programmumgebung ab.

Siehe auch

chmod(), close(), dup(), fcntl(), getrlimit(), lseek(), open(), read(), umask(), write(), stat(), fcntl.h, sys/stat.h, sys/types.h.