_sopen, _wsopen
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 |
+ |