Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

open, open64, openat, openat64 - Datei öffnen

&pagelevel(4)&pagelevel

Definition

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open (const char *path, int oflag , .../* mode_t mode*/);
int open64 (const char *path, int oflag , .../* mode_t mode*/);
int openat (int fd, const char *path, int oflag , .../* mode_t mode*/);
int openat64 (int fd, const char *path, int oflag , .../* mode_t mode*/);

Beschreibung

Wenn POSIX-Dateien ausgeführt werden, verhält sich die Funktion XPG4-konform wie folgt:

Die Funktion open() verbindet eine Datei mit einem Dateideskriptor. Sie erzeugt eine Dateibeschreibung, die auf eine Datei verweist und einen Dateideskriptor, der auf diese Dateibeschreibung verweist. Der Dateideskriptor wird von anderen Ein-/Ausgabefunktionen genutzt, um auf diese Datei zu verweisen. Das Argument path zeigt auf einen Pfadnamen, der die Datei bezeichnet.

open() liefert einen Dateideskriptor für die genannte Datei, der der kleinste, noch nicht geöffnete Dateideskriptor des Prozesses ist. Die Dateibeschreibung ist neu, daher teilt dieser Dateideskriptor sie nicht mit anderen Prozessen im System. Das Dateideskriptor-Kennzeichen FD_CLOEXEC, das mit dem neuen Dateideskriptor verbunden ist, wird gelöscht (siehe fcntl() ).

Der Lese-/Schreibzeiger wird auf den Dateianfang gesetzt.

Das Dateistatus-Byte und der Zugriffsmodus werden entsprechend dem Wert von oflag gesetzt.

Die Werte für oflag werden durch bitweise inklusive Oder-Verknüpfung aus den nachfolgenden Kennzeichen erzeugt, die in fcntl.h definiert sind. In Anwendungen muss genau eines der ersten vier der unten aufgeführten Kennzeichen (Zugriffsmodi) im Wert von oflag angegeben sein:

O_RDONLY

Nur zum Lesen öffnen.

O_WRONLY

Nur zum Schreiben öffnen.

O_RDWR

Zum Lesen und Schreiben öffnen. Das Ergebnis ist nicht definiert, wenn dieses Kennzeichen auf eine FIFO-Datei angewendet wird.

O_SEARCH

Dateiverzeichnis zum Suchen öffnen. Das Ergebnis ist nicht definiert, wenn dieses Kennzeichen nicht auf ein Dateiverzeichnis angewendet wird.

Jede Kombination der folgenden zusätzlichen Kennzeichen kann benutzt werden:

O_APPEND

Der Lese-/Schreibzeiger wird vor jedem Schreiben auf das Dateiende gesetzt.

O_CREAT

Ist die Datei vorhanden, bleibt dieses Kennzeichen wirkungslos, außer die unter O_EXCL angegebenen Bedingungen existieren. Anderenfalls wird die Datei erzeugt und die Benutzernummer der Datei auf die effektive Benutzernummer des Prozesses gesetzt. Die Gruppennummer der Datei wird auf die effektive Gruppennummer des Prozesses oder auf die Gruppennummer des übergeordneten Dateiverzeichnisses der Datei gesetzt. Die Zugriffsrechte der Datei (siehe auch sys/stat.h) werden auf den Wert von mode gesetzt und dann folgendermaßen verändert: die einzelnen Bits werden mit dem Komplement der Schutzbitmaske des Prozesses Und-verknüpft (siehe auch umask()); das heißt, alle Bits in den Zugriffsrechten, die in der Schutzbitmaske gesetzt sind, werden gelöscht. Sind andere Bits, als die Schutzbits einer Datei gesetzt, so ist die Wirkung undefiniert. mode hat keinen Einfluss darauf, ob die Datei zum Lesen, zum Schreiben oder zum Lesen und Schreiben geöffnet wird.

O_EXCL

open() ist erfolglos, wenn O_CREAT und O_EXCL gesetzt sind und die Datei vorhanden ist. Ist die Datei nicht vorhanden, so werden die zwei Aktionen, Prüfung auf Existenz der Datei und Erzeugung der Datei, als eine einzige Aktion behandelt. In diese Aktion kann kein anderer Prozess eingreifen, den open() für denselben Dateinamen und dasselbe Dateiverzeichnis ausführen soll, und der ebenfalls O_EXCL und O_CREAT gesetzt hat. Die Wirkung ist undefiniert, wenn O_CREAT nicht gesetzt ist.

O_NOCTTY

Wenn dieses Kennzeichen gesetzt ist und path ein Terminal bezeichnet, bewirkt open(), dass dieses Terminal nicht das steuernde Terminal des Prozesses wird.

O_NONBLOCK

Wenn eine FIFO zum Lesen oder zum Schreiben geöffnet wird (O_RDONLY oder O_WRONLY):

  • O_NONBLOCK ist gesetzt: Ein open() zum Lesen kehrt ohne Verzögerung zurück. Ein open() zum Schreiben liefert nur dann einen Fehler, wenn kein Prozess diese Datei zu diesem Zeitpunkt zum Lesen geöffnet hat.

  • O_NONBLOCK ist nicht gesetzt: Ein open() zum Lesen wartet, bis ein Prozess die Datei zum Schreiben öffnet. Ein open() zum Schreiben wartet, bis ein Prozess die Datei zum Lesen öffnet.

Wenn eine block- oder zeichenorientierte Gerätedatei geöffnet wird, die nichtwartendes Öffnen unterstützt:

  • O_NONBLOCK ist gesetzt: open() kehrt zurück, ohne darauf zu warten, dass das Gerät fertig oder verfügbar ist. Das nachfolgende Verhalten des Gerätes ist gerätespezifisch.

  • O_NONBLOCK ist nicht gesetzt: Die Funktion open() wartet, bis das Gerät fertig oder verfügbar ist, bevor sie zurückkehrt. Anderenfalls ist das Verhalten von O_NONBLOCK undefiniert.

O_SYNC

Wenn O_SYNC für eine normale Datei gesetzt ist, dann verursacht ein Schreibzugriff auf diese Datei, dass der Prozess solange wartet, bis die Daten an die zu Grunde liegende Hardware übergeben wurden.

O_TRUNC

Wenn die Datei existiert, eine normale Datei ist und erfolgreich mit O_RDWR oder O_WRONLY geöffnet wurde, dann wird ihre Länge auf 0 gekürzt und Eigentümer und Zugriffsrechte bleiben unverändert. Dies hat keine Wirkung auf FIFO- oder Terminal-Gerätedateien. Die Wirkung auf andere Dateiarten ist nicht definiert, da sie von vielen Faktoren abhängig ist. Das Ergebnis bei einer Verwendung von O_TRUNC zusammen mit O_RDONLY ist undefiniert.

O_LARGEFILE

Falls angegeben, ist das in der internen Beschreibung der offenen Datei festgelegte Offset-Maximum der höchste Wert, der in einem Objekt des Typs off64_t korrekt dargestellt werden kann.

Wenn O_CREAT gesetzt ist und die Datei vorher nicht existierte, dann markiert open() im Erfolgsfall die Felder st_atime, st_ctime und st_mtime der Datei und die Felder st_ctime und st_mtime des übergeordneten Dateiverzeichnisses zum Aktualisieren.

Wenn O_TRUNC gesetzt ist und die Datei vorher bereits existierte, dann markiert open() im Erfolgsfall die Felder st_ctime und st_mtime der Datei zum Aktualisieren.

Es besteht kein funktionaler Unterschied zwischen open() und open64(), außer dass open64() im File Status Flag implizit das Bit O_LARGEFILE setzt. Die Funktion open64() entspricht der Verwendung der Funktion open(), bei der O_LARGEFILE in oflag gesetzt ist.

Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus:

Öffnen einer Datei; Ist beim Parameter oflag O_NONBLOCK nicht gesetzt, gilt für FIFO: Ein open() zum Lesen blockiert den aufrufenden Thread, bis ein Thread die Datei zum Schreiben öffnet. Ein open() zum Schreiben blockiert den Thread, bis ein Thread die Datei zum

Lesen öffnet. Wird eine block- oder zeichenorientierte Gerätedatei geöffnet wird, die nichtwartendes Öffnen unterstützt, gilt: Die open()-Funktion blockiert den aufrufenden Thread, bis das Gerät fertig oder verfügbar ist.

Erweiterung
Wenn O_CREAT und O_EXCL gesetzt sind, und path ein symbolischer Verweis ist, wird der Verweis nicht verfolgt.

(Ende)

BS2000
Wenn BS2000-Dateien ausgeführt werden, ist Folgendes zu beachten:

const char *path ist eine Zeichenkette, die die zu öffnende Datei angibt. path kann jeder gültige BS2000-Dateiname sein:

  • /BS2/link=linkname linkname bezeichnet einen BS2000-Linknamen.

  • /BS2/(SYSDTA), /BS2/(SYSOUT), /BS2/(SYSLST), die entsprechende Systemdatei

  • /BS2/(SYSTERM), Terminal-Ein-/Ausgabe

  • /BS2/(INCORE), temporäre Binärdatei, die nur im virtuellen Speicher angelegt wird.

oflag ist eine Konstante, die im Header <stdio.h> definiert ist und die gewünschte Zugriffsart angibt, (oder die entsprechende Oktalzahl) und zwar:

O_RDONLY

0000

Öffnen zum Lesen. Die Datei muss bereits vorhanden sein.

O_WRONLY

0001

Öffnen zum Schreiben. Die Datei muss bereits vorhanden sein. Der alte Inhalt bleibt erhalten.

O_TRUNC|O_WRONLY

01001

Öffnen zum Schreiben. Ist die Datei vorhanden, wird der alte Inhalt gelöscht. Ist die Datei nicht vorhanden, wird sie neu erstellt.

O_RDWR

0002

Öffnen zum Lesen und Schreiben. Die Datei muss bereits vorhanden sein. Der alte Inhalt bleibt erhalten.

O_TRUNC|O_RDWR

01002

Öffnen zum Lesen und Schreiben. Ist die Datei vorhanden, wird der alte Inhalt gelöscht. Ist die Datei nicht vorhanden, wird sie neu erstellt.

O_WRRD

0003

Öffnen zum Neuschreiben und Lesen. Ist die Datei vorhanden, wird der alte Inhalt gelöscht. Ist die Datei nicht vorhanden, wird sie neu erstellt.

O_APPEND_OLD|O_WRONLY

0401

Öffnen zum Anfügen ans Ende der Datei. Die Datei muss bereits vorhanden sein. Es wird auf das Dateiende positioniert, d.h. der alte Inhalt bleibt erhalten und der
neue Text wird ans Ende der Datei angehängt.

O_APPEND_OLD|O_RDWR

0402

Öffnen zum Anfügen ans Ende der Datei und zum Lesen. Die Datei muss bereits vorhanden sein. Der alte Inhalt bleibt erhalten und der neue Text wird ans Ende der Datei angehängt. Nach dem Öffnen ist die Datei bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3.0 vorhanden) auf das Dateiende positioniert, bei ANSI-Funktionalität auf den Dateianfang.

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 open(), open64() fehl und errno wird auf ENOSYS gesetzt. Weitere Auswirkungen hat der Schalter erst, wenn die Datei geschlossen wird.

Beim Öffnen und Lesen einer bestehenden Datei wird der LBP unabhängig vom lbp-Schalter immer berücksichtigt:

      • Ist der LBP der Datei ungleich 0, wird er ausgewertet. Ein eventuell vorhandener Marker wird ignoriert.

      • Ist der LBP = 0, wird nach einem Marker gesucht und die Dateilänge daraus ermittelt. Falls kein Marker gefunden wird, wird das Ende des letzten vollständigen
        Blocks als Dateiende betrachtet.

O_LBP

Beim Schließen einer Datei, die verändert oder neu erstellt wurde, wird kein Marker geschrieben (auch wenn einer vorhanden war) und ein gültiger LBP gesetzt. Auf
diese Weise können Dateien mit Marker auf LBP ohne Marker umgestellt werden.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.

Beim Schließen einer Datei, die verändert wurde, wird der LBP auf Null (=ungültig) gesetzt. Ein Marker wird nur dann geschrieben, wenn vorher bereits ein Marker vorhanden war. Falls die Datei beim Öffnen einen gültigen LBP besaß, wird kein Marker geschrieben, da in diesem Fall davon ausgegangen wird, dass kein Marker vorhanden ist.
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 open(), open64() 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 Lesen mit read() werden Sätze maximaler Länge nicht mit dem darauffolgenden
Satz verkettet.
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 Folgendes:

      • Beim Schreiben
        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.

      • Beim Lesen
        Hat ein Satz die maximale Satzlänge, wird angenommen, dass es sich bei dem Folgesatz um die Fortsetzung dieses Satzes handelt und die Sätze werden verkettet.

Zum Eröffnen von Dateien mit satzorientierter Ein-/Ausgabe (Satz-E/A) kann beim Parameter mode die Konstante O_RECORD angegeben werden. Sie kann grundsätzlich mit jeder anderen Konstanten außer O_LBP kombiniert werden. Lediglich bei ISAM-Dateien ist das Anfügen an das Ende der Datei nicht erlaubt, also die Kombination mit 0401 und 0402. Bei ISAM-Dateien bestimmt sich die Position aus dem Schlüssel im Satz.

O_RECORD

Dieser Schalter bewirkt Folgendes:

      • Die Funktion read() liest bei Satz-E/A einen Satz (bzw. Block) von der aktuellen Dateiposition. Ist die Anzahl n der zu lesenden Zeichen größer als die aktuelle Satzlänge, wird trotzdem nur dieser Satz gelesen. Ist n kleiner als die aktuelle Satzlänge, werden nur die ersten n Zeichen gelesen. Beim nächsten Lesezugriff werden die Daten des nächsten Satzes gelesen.
      • 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.

(Ende)

Die Funktionen openat() und openat64() sind äquivalent zu den Funktion open() und open64(), außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird die zu öffnende Datei nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis geöffnet. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüfen die Funktionen, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung.

Der Parameter oflag und der optionale vierte Parameter mode entsprechen exakt den Parametern von open() bzw. open64().

Wenn der Funktion openat() bzw. openat64() für den Parameter fd der Wert AT_FDCWD übergeben wird, wird das aktuelle Dateiverzeichnis benutzt.

Returnwert

nichtnegative ganze Zahl, die die kleinste, nicht benutzte Dateideskriptor-Zahl darstellt,



bei Erfolg.


-1

bei Fehler. Es werden keine Dateien erzeugt oder aktualisiert. errno wird gesetzt, um denFehler anzuzeigen.

Fehler

open(), open64(), openat() und openat64() schlagen fehl, wenn gilt:


 

EACCES

Für eine Komponente des Pfades existiert kein Durchsuchrecht.

Die Datei existiert nicht, und die durch oflag angegebenen Zugriffsrechte werden nicht erteilt.

Die Datei existiert nicht, und das übergeordnete Verzeichnis der zu erstellenden Datei hat kein Schreibrecht.

O_TRUNC ist gesetzt, und es gibt kein Schreibrecht für die Datei.

 

Erweiterung

 

EAGAIN

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

 

EEXIST

O_CREAT und O_EXCL sind gesetzt, und die angegebene Datei ist bereits vorhanden.

 

EFAULT

path weist über den zugewiesenen Adressraum des Prozesses hinaus.

 

EINTR

Während des Systemaufrufs open() wurde ein Signal abgefangen.

 

EINVAL

Der Wert des Arguments oflag ist ungültig.

 

EIO

Während des Öffnens eines stream-orientierten Gerätes ist ein Verbindungsabbau oder ein Fehler aufgetreten.

 

EISDIR

Die angegebene Datei ist ein Dateiverzeichnis und oflag enthält O_WRONLY oder O_RDWR.

 

ELOOP

Bei der Auflösung von path wurden zu viele symbolische Links angetroffen.

 

EMFILE

{OPEN_MAX}-Dateideskriptoren sind bereits für den aufrufenden Prozess geöffnet.

 

EMULTIHOP

Komponenten von path erfordern den Sprung auf mehrere ferne Rechner, aber der Dateisystemtyp erlaubt dies nicht.

 

ENAMETOOLONG 



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

 

ENFILE

Die maximal erlaubte Anzahl von Dateien im System ist bereits geöffnet.

 

ENOENT

O_CREAT ist nicht gesetzt, und die angegebene Datei ist nicht vorhanden.

O_CREAT ist gesetzt, und entweder existiert der Pfadnamen-Anfang nicht oder path zeigt auf eine leere Zeichenkette.

 

ENOLINK

path weist auf einen fernen Rechner, zu dem keine aktive Verbindung existiert.


ENOSPC

Die Datei existiert nicht, und O_CREAT ist gesetzt, oder das Dateiverzeichnis oder Dateisystem, in dem eine neue Datei erstellt werden soll, kann nicht erweitert werden.


ENOSR

Ein Datenstrom kann nicht zugewiesen werden.


ENOTDIR

Eine Komponente des Pfades ist kein Dateiverzeichnis.


ENXIO

Die angegebene Datei ist eine Gerätedatei für ein zeichen- oder blockorientiertes Gerät und das dieser Gerätedatei zugewiesene Gerät existiert nicht.
O_NONBLOCK ist gesetzt, die angegebene Datei ist eine FIFO, O_WRONLY ist gesetzt, und kein Prozess hat die Datei zum Lesen geöffnet.


EROFS

Die angegebene Datei befindet sich auf einem Dateisystem, das nur Leserecht hat, und entweder O_WRONLY, O_RDWR, O_CREAT (wenn die Datei nicht existiert) oder O_TRUNC ist im Argument oflag gesetzt.


EOVERFLOW

Für eine Datei ist O_LARGEFILE nicht gesetzt und die Größe der Datei kann in einem Objekt des Typs off_t nicht korrekt dargestellt werden.


Zusätzlich schlagen openat() und openat64() fehl, wenn gilt:


EACCES

Der Parameter fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses.


EBADF

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD, noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor.


ENOTDIR

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden.


EINVAL

Die Implementierung unterstützt nicht O_SEARCH für das POSIX-File-System bs2fs.

Hinweise

Ob open() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

BS2000
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 neu angelegt, so wird standardmäßig eine Datei mit folgenden Attributen 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.SAM-Dateien sind beim Öffnen mit open() immer Textdateien.

Bei Verwendung eines Linknamens lassen sich mit dem ADD-FILE-LINK-Kommando folgende Dateiattribute ändern: Zugriffsmethode, Satzlänge, Satzformat, Blocklänge und Blockformat.
In allen Fällen, in denen der alte Inhalt einer bereits existierenden Datei gelöscht wird (0003, 01001), bleiben die Katalogeigenschaften dieser Datei erhalten.

Position des Lese-/Schreibzeigers im Anfügemodus:

Wenn der Lese-/Schreibzeiger in einer Datei, die im Anfügemodus eröffnet wurde (0401, 0402), explizit vom Dateiende wegpositioniert wurde (lseek()), wird er je nach KR- oder ANSI-Funktionalität unterschiedlich behandelt.
KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden): Der aktuelle Lese/Schreibzeiger wird nur beim Schreiben mit der Elementarfunktion write() ignoriert und automatisch ans Ende der Datei positioniert.
ANSI-Funktionalität: Der aktuelle Lese-/Schreibzeiger wird bei allen Schreibfunktionen ignoriert und automatisch ans Ende der Datei positioniert.

Der Versuch, eine nicht existierende Datei zum Lesen (0000, 0002), zum Ändern (0001) sowie zum Anfügen (0401, 0402) zu öffnen, endet mit Fehler.
Eine Datei kann gleichzeitig für verschiedene Zugriffsmodi eröffnet werden, sofern diese Modi im BS2000-Datenverwaltungssystem miteinander verträglich sind.
(INCORE)-Dateien können nur zum Neuschreiben (01001) oder zum Neuschreiben und Lesen (0003) geöffnet werden. Es müssen zuerst Daten geschrieben werden. Um die geschriebenen Daten wieder einlesen zu können, muss die Datei mit der Funktion lseek() auf den Dateianfang positioniert werden.

Wenn ein Programm startet, werden die Standarddateien für Eingabe, Ausgabe und Fehlerausgabe automatisch mit folgenden Dateideskriptoren geöffnet:

stdin:

0

stdout:

1

stderr:

2

(Ende)

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

Siehe auch

chmod(), close(), creat(), creat64(), dup(), fcntl(), fdopen(), lseek(), lseek64(), read(), umask(), write(), fcntl.h, sys/types.h, sys/stat.h.