_sopen_s
, _wsopen_s
Abre un archivo para compartirlo. Estas versiones de y _wsopen
tienen mejoras de seguridad, como se describe en Características de _sopen
seguridad de CRT.
Sintaxis
errno_t _sopen_s(
int* pfh,
const char *filename,
int oflag,
int shflag,
int pmode
);
errno_t _wsopen_s(
int* pfh,
const wchar_t *filename,
int oflag,
int shflag,
int pmode,
);
Parámetros
pfh
Manipulador de archivo o -1 si se produce un error.
filename
Nombre de archivo.
oflag
Tipo de operaciones permitido.
shflag
Tipo de uso compartido permitido.
pmode
Configuración de permisos.
Valor devuelto
Un valor devuelto distinto de cero indica un error; en ese caso, errno
se establece en uno de los siguientes valores.
Valor de errno |
Condición |
---|---|
EACCES |
La ruta de acceso proporcionada es un directorio o el archivo es de solo lectura, pero se intentó realizar una operación de abrir para escribir. |
EEXIST |
Las marcas _O_CREAT y _O_EXCL se han especificado, pero filename ya existe. |
EINVAL |
Argumento oflag , shflag o pmode no válido, o bien pfh o filename era un puntero nulo. |
EMFILE |
No hay más descriptores de archivo disponibles. |
ENOENT |
No se encuentra el archivo o la ruta de acceso. |
Si se pasa un argumento no válido a la función, se invoca al manipulador de parámetros no válidos, tal como se describe en Validación de parámetros. Si la ejecución puede continuar, errno
se establece en EINVAL
y EINVAL
se devuelve .
Para obtener más información sobre estos y otros códigos de retorno, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
En caso de error, se devuelve -1 mediante pfh
(a menos que pfh
sea un puntero nulo).
Comentarios
La función _sopen_s
abre el archivo especificado por filename
y lo prepara para una lectura o escritura compartida, como establecen las marcas oflag
y shflag
. _wsopen_s
es una versión con caracteres anchos de _sopen_s
; el argumento filename
para _wsopen_s
es una cadena de caracteres anchos. Por lo demás,_wsopen_s
y _sopen_s
se comportan de forma idéntica.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiarlo, consulte Estado global en CRT.
Asignaciones de rutinas de texto genérico
Rutina Tchar.h |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
La expresión de entero oflag
se forma combinando una o más constantes de manifiesto, que están definidas en <fcntl.h>
. Cuando dos o más constantes forman el argumento oflag
, se combinan con el operador bit a bit OR (|
).
Constante oflag |
Comportamiento |
---|---|
_O_APPEND |
Mueve un puntero de archivo al final del archivo antes de cada operación de escritura. |
_O_BINARY |
Abre el archivo en modo binario (sin traducir). Consulte fopen para ver una descripción del modo binario. |
_O_CREAT |
Crea un archivo y lo abre para escribir en él. No tiene ningún efecto si el archivo especificado por filename existe. El argumento pmode es necesario cuando _O_CREAT se especifica. |
_O_CREAT | _O_SHORT_LIVED |
Crea un archivo como temporal y, si es posible, no se vacía en el disco. El argumento pmode es necesario cuando _O_CREAT se especifica. |
_O_CREAT | _O_TEMPORARY |
Crea un archivo temporal. El archivo se elimina cuando se cierra el último descriptor de archivo. El argumento pmode es necesario cuando _O_CREAT se especifica. A fin de conservar el comportamiento heredado para la compatibilidad de aplicaciones, no se impide que otros procesos eliminen este archivo. |
_O_CREAT | _O_EXCL |
Devuelve un valor de error si un archivo especificado por filename existe. Válido únicamente cuando se usa con _O_CREAT . |
_O_NOINHERIT |
Impide que se cree un descriptor de archivo compartido. |
_O_RANDOM |
Especifica que el almacenamiento en caché está optimizado para el acceso aleatorio (pero no restringido a este) desde el disco. |
_O_RDONLY |
Abre un archivo únicamente para leerlo. No se puede especificar con _O_RDWR o _O_WRONLY . |
_O_RDWR |
Abre un archivo tanto para lectura como para escritura. No se puede especificar con _O_RDONLY o _O_WRONLY . |
_O_SEQUENTIAL |
Especifica que el almacenamiento en caché está optimizado para el acceso secuencial (pero no restringido a este) desde el disco. |
_O_TEXT |
Abre un archivo en modo de texto ANSI (traducido). Para obtener más información, vea E/S de archivo en modo binario y de texto y fopen . |
_O_TRUNC |
Abre un archivo y lo trunca a longitud cero. El archivo debe tener permiso de escritura. No se puede especificar con _O_RDONLY . Cuando _O_TRUNC se usa con _O_CREAT , se abre un archivo existente o se crea uno. Nota: la marca _O_TRUNC destruye el contenido del archivo especificado. |
_O_WRONLY |
Abre un archivo únicamente para escribir en él. No se puede especificar con _O_RDONLY o _O_RDWR . |
_O_U16TEXT |
Abre un archivo en modo Unicode UTF-16. |
_O_U8TEXT |
Abre un archivo en modo Unicode UTF-8. |
_O_WTEXT |
Abre un archivo en modo Unicode. |
Para especificar el modo de acceso a archivos, se debe especificar _O_RDONLY
, _O_RDWR
o _O_WRONLY
. No existe un valor predeterminado para el modo de acceso.
Cuando un archivo se abre en modo Unicode con _O_WTEXT
, _O_U8TEXT
o _O_U16TEXT
, las funciones de entrada traducen los datos leídos de dicho archivo a datos UTF-16 almacenados como de tipo wchar_t
. Las funciones que escriben en un archivo abierto en modo Unicode esperan que haya búferes que contengan datos UTF-16 almacenados como de tipo wchar_t
. Si el archivo está codificado como UTF-8, los datos UTF-16 se convierten a UTF-8 al escribirse. El contenido con codificación UTF-8 del archivo se traslada a UTF-16 al leerse. Si se trata de leer o escribir un número impar de bytes en el modo Unicode, se producirá un error de validación de parámetros . Para leer o escribir datos almacenados en el programa como UTF-8, use un modo de archivo binario o de texto en lugar de un modo Unicode. Cualquier conversión de codificación que sea necesaria es su responsabilidad.
Si se llama a _sopen_s
con _O_WRONLY | _O_APPEND
(modo anexar) y _O_WTEXT
, _O_U16TEXT
o _O_U8TEXT
, primero intentará abrir el archivo para lectura y escritura, leer la BOM y, luego, volver a abrirlo únicamente para escritura. Si no se puede abrir el archivo para lectura y escritura, abre el archivo solamente para escritura y usa el valor predeterminado como opción del modo Unicode.
El argumento shflag
es una expresión constante compuesta por una de las constantes de manifiesto siguientes, que se definen en <share.h>
.
Constante shflag |
Comportamiento |
---|---|
_SH_DENYRW |
Deniega el acceso de lectura y escritura a un archivo. |
_SH_DENYWR |
Deniega el acceso de escritura a un archivo. |
_SH_DENYRD |
Deniega el acceso de lectura a un archivo. |
_SH_DENYNO |
Permite el acceso de lectura y escritura. |
El argumento pmode
siempre es necesario, cosa que no sucede con _sopen
. Cuando se especifica _O_CREAT
, si el archivo no existe, pmode
especifica la configuración de permisos del archivo, que se establece cuando el nuevo archivo se cierra por primera vez. De lo contrario, pmode
se omite. pmode
es una expresión de entero que contiene una o ambas constantes del manifiesto _S_IWRITE
y _S_IREAD
, definidas en <sys\stat.h>
. Cuando se proporcionan ambas constantes, se combinan con el operador bit a bit OR. El significado de pmode
es el que se indica a continuación.
pmode |
Significado |
---|---|
_S_IREAD |
Solo se permite la lectura. |
_S_IWRITE |
Escritura permitida. (De hecho, se permiten la lectura y escritura). |
_S_IREAD | _S_IWRITE |
Lectura y escritura permitidas. |
Si no se ha concedido el permiso de escritura, el archivo será de solo lectura. En el sistema operativo Windows todos los archivos se pueden leer; no se puede conceder permisos únicamente de escritura. En consecuencia, los modos _S_IWRITE
y _S_IREAD | _S_IWRITE
son equivalentes.
_sopen_s
aplica la máscara de permisos de archivo actual a pmode
antes de que los permisos se hayan definido. (Consulte _umask
).
Requisitos
Función | Encabezado necesario | Encabezado opcional |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h> , <sys\types.h> , , <sys\stat.h> , <share.h> |
_wsopen_s |
<io.h> o <wchar.h> |
<fcntl.h> , <sys/types.h> , , <sys/stat.h> , <share.h> |
_sopen_s
y _wsopen_s
son extensiones de Microsoft. Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
Vea el ejemplo de _locking
.
Consulte también
E/S de bajo nivel
_close
_creat
, _wcreat
fopen
, _wfopen
_fsopen
, _wfsopen
_open
, _wopen