_sopen, _wsopen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu io.h - Index


Header-Datei

fcntl.h, sys\stat.h, share.h, io.h, stdio.h

Kategorie

Eingabe-/Ausgaberoutinen

Prototyp

int _sopen(char *path, int access, int shflag[, int mode]);

int _wsopen(wchar_t *path, int access, int shflag[, int mode]);

Beschreibung

Öffnet eine gemeinsam genutzte Datei.

_sopen öffnet die durch path angegebene Datei und bereitet sie entsprechend den Angaben in access, shflag und mode zum gemeinsamen Lesen oder Schreiben vor.

_wsopen ist die Unicode-Version von _sopen. Die Unicode-Version akzeptiert einen Zeichenstring vom Typ wchar_t als Dateinamen. Ansonsten haben die Funktionen das gleiche Verhalten.

Bei _sopen wird access durch die bitweise ODER-Verknüpfung von Flags aus den folgenden Listen gebildet:

Lesen-/Schreiben-Flag

Es kann nur eines der folgenden Flags verwendet werden:

O_RDONLY

Nur zum Lesen öffnen.

O_WRONLY

Nur zum Schreiben öffnen.

O_RDWR

Zum Lesen und Schreiben öffnen.



Andere Zugriffs-Flags

Es kann eine beliebige logische Kombination der folgenden Flags verwendet werden:

O_NDELAY

Wird nicht verwendet, dient zur UNIX-Kompatibilität.

O_APPEND

Wenn dieses Bit gesetzt ist, wird der Dateizeiger vor jeder Schreiboperation an das Dateiende gesetzt.

O_CREA

Wenn die Datei existiert, ist diese Flag-Einstellung unwirksam. Ist die Datei nicht vorhanden, wird sie erstellt und mit den Modus-Bits werden die Dateiattribut-Bits wie in chmod gesetzt.

O_TRUNC

Wenn die Datei vorhanden ist, wird ihre Länge auf 0 verkürzt. Die Dateiattribute bleiben unverändert.

O_EXCL

Wird nur in Verbindung mit O_CREAT verwendet. Wenn die Datei bereits existiert, wird ein Fehler zurückgegeben.

O_BINARY

Dieses Flag kann angegeben werden, um die Datei explizit im Binärmodus zu öffnen.

O_TEXT

Dieses Flag kann angegeben werden, um die Datei explizit im Textmodus zu öffnen.

O_NOINHERIT

Die Datei wird nicht an untergeordnete Programme weitergegeben.



Anmerkung:  Diese symbolischen O_...-Konstanten sind in fcntl.h definiert.

Wird weder O_BINARY noch O_TEXT angegeben, wird die Datei in dem Modus geöffnet, der durch die globale Variable _fmode festgelegt wird.

Wenn das Flag O_CREAT zum Aufbau von access verwendet wird, muss für _sopen eine der folgenden, in sys\stat.h definierten symbolischen Konstanten als Argument mode übergeben werden.

S_IWRITE

Berechtigung zum Schreiben

S_IREAD

Berechtigung zum Lesen

S_IREAD|S_IWRITE

Berechtigung zum Lesen/Schreiben



shflag gibt die Art des erlaubten gemeinsamen Zugriffs auf die Datei path an. Die für shflag gültigen symbolischen Konstanten sind in share.h definiert.

SH_COMPAT

Legt den Kompatibilitätsmodus fest.

SH_DENYRW

Verweigert den Lese-/Schreibzugriff

SH_DENYWR

Verweigert den Schreibzugriff

SH_DENYRD

Verweigert den Lesezugriff

SH_DENYNONE

Erlaubt den Lese-/Schreibzugriff

SH_DENYNO

Erlaubt den Lese-/Schreibzugriff



Rückgabewert

Bei erfolgreicher Ausführung gibt _sopen eine nicht negative ganze Zahl (das Datei-Handle) zurück, und der Dateizeiger (der die aktuelle Position innerhalb der Datei angibt) wird auf den Dateianfang gesetzt.

Tritt ein Fehler auf, wird -1 zurückgegeben, und der globalen Variablen errno wird einer der folgenden Werte zugewiesen:

EACCES

Permission denied (Zugriff verweigert)

EINVACC

Invalid access code (Ungültiger Zugriffscode)

EMFILE

Too many open files (Zu viele Dateien geöffnet)

ENOENT

Path or file function not found (Pfad- oder Dateifunktion nicht gefunden)



Beispiel



  #include <io.h>
  #include <fcntl.h>
  #include <sys\stat.h>
  #include <process.h>
  #include <share.h>
  #include <stdio.h>
  #include <stdlib.h>
  int main(void)
  {
     int handle,
         handle1;
     handle = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
     if      (handle == -1)
     {
       perror (sys_errlist[errno]);
       exit (1);
     }
     if (!handle)
     {
        printf("sopen failed\n");
        exit(1);
     }
     /*      Mit sopen Schreibzugriff versuchen.
     */
     handle1 = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
     if      (handle1 == -1)
     {
       perror (sys_errlist[errno]);
       exit (1);
     }
     if (!handle1)
     {
        printf("sopen failed\n");
        exit (1);
     }
     close (handle);
     close (handle1);
     return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

_sopen

+

_wsopen

+