_sopen, _wsopen_sopen, _wsopen

Abre un archivo para compartirlo.Opens a file for sharing. Hay disponibles versiones más seguras de estas funciones: vea _sopen_s, _wsopen_s.More secure versions of these functions are available: see _sopen_s, _wsopen_s.

SintaxisSyntax

int _sopen(
   const char *filename,
   int oflag,
   int shflag [,
   int pmode ]
);
int _wsopen(
   const wchar_t *filename,
   int oflag,
   int shflag [,
   int pmode ]
);

ParámetrosParameters

filenamefilename
Nombre de archivo.File name.

oflagoflag
Tipo de operaciones permitido.The kind of operations allowed.

shflagshflag
Tipo de uso compartido permitido.The kind of sharing allowed.

pmodepmode
Configuración de permisos.Permission setting.

Valor devueltoReturn Value

Cada una de estas funciones devuelve un descriptor de archivo correspondiente al archivo abierto.Each of these functions returns a file descriptor for the opened file.

Si filename o Oflag es un puntero nulo , o si Oflag o shflag no están dentro de un intervalo válido de valores, se invoca el controlador de parámetros no válidos, tal y como se describe en validación de parámetros.If filename or oflag is a NULL pointer, or if oflag or shflag is not within a valid range of values, the invalid parameter handler is invoked, as described in Parameter Validation. Si la ejecución puede continuar, estas funciones devuelven-1 y establecen errno en uno de los valores siguientes.If execution is allowed to continue, these functions return -1 and set errno to one of the following values.

valor de errnoerrno value CondiciónCondition
EACCESEACCES 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.The given path is a directory, or the file is read-only, but an open-for-writing operation was attempted.
EEXISTEEXIST Se especificaron _O_CREAT y _O_EXCL marcas, pero el nombre de archivo ya existe._O_CREAT and _O_EXCL flags were specified, but filename already exists.
EINVALEINVAL Argumento Oflag o shflag no válido.Invalid oflag or shflag argument.
EMFILEEMFILE No hay más descriptores de archivo disponibles.No more file descriptors are available.
ENOENTENOENT El archivo o la ruta de acceso no se encuentra.File or path is not found.

Para obtener más información sobre estos y otros códigos de retorno, vea _doserrno, errno, _sys_errlist y _sys_nerr.For more information about these and other return codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

ObservacionesRemarks

La función _sopen abre el archivo especificado por filename y prepara el archivo para lectura o escritura compartida, tal como se define en Oflag y shflag.The _sopen function opens the file specified by filename and prepares the file for shared reading or writing, as defined by oflag and shflag. _wsopen es una versión con caracteres anchos de _sopen; el argumento filename para _wsopen es una cadena de caracteres anchos._wsopen is a wide-character version of _sopen; the filename argument to _wsopen is a wide-character string. _wsopen y _sopen se comportan de manera idéntica._wsopen and _sopen behave identically otherwise.

De forma predeterminada, el ámbito de este estado global de esta función es la aplicación.By default, this function's global state is scoped to the application. Para cambiar esto, vea estado global en CRT.To change this, see Global state in the CRT.

Asignaciones de rutina de texto genéricoGeneric-Text Routine Mappings

Rutina Tchar.hTchar.h routine _UNICODE y _MBCS no definidos_UNICODE and _MBCS not defined _MBCS definido_MBCS defined _UNICODE definido_UNICODE defined
_tsopen_tsopen _sopen_sopen _sopen_sopen _wsopen_wsopen

La expresión de entero Oflag se forma combinando una o varias de las constantes de manifiesto siguientes, que se definen en <fcntl.h> .The integer expression oflag is formed by combining one or more of the following manifest constants, which are defined in <fcntl.h>. Cuando dos o más constantes forman el argumento Oflag, se combinan con el operador OR bit a bit ( | ).When two or more constants form the argument oflag, they are combined with the bitwise-OR operator ( | ).

Oflag constante)oflag constant ComportamientoBehavior
_O_APPEND_O_APPEND Mueve un puntero de archivo al final del archivo antes de cada operación de escritura.Moves the file pointer to the end of the file before every write operation.
_O_BINARY_O_BINARY Abre el archivo en modo binario (sin traducir).Opens the file in binary (untranslated) mode. (Vea fopen para ver una descripción del modo binario.)(See fopen for a description of binary mode.)
_O_CREAT_O_CREAT Crea un archivo y lo abre para escribir en él.Creates a file and opens it for writing. No tiene ningún efecto si el archivo especificado por filename existe.Has no effect if the file specified by filename exists. El argumento PMODE es necesario cuando se especifica _O_CREAT .The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_SHORT_LIVED_O_CREAT | _O_SHORT_LIVED Crea un archivo temporal y, si es posible, no se vuelca en el disco.Creates a file as temporary and if possible does not flush to disk. El argumento PMODE es necesario cuando se especifica _O_CREAT .The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_TEMPORARY_O_CREAT | _O_TEMPORARY Crea un archivo temporal. El archivo se elimina cuando se cierra el último descriptor de archivo.Creates a file as temporary; the file is deleted when the last file descriptor is closed. El argumento PMODE es necesario cuando se especifica _O_CREAT .The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_EXCL_O_CREAT | _O_EXCL Devuelve un valor de error si existe un archivo especificado por filename .Returns an error value if a file specified by filename exists. Solo se aplica cuando se usa con _O_CREAT.Applies only when used with _O_CREAT.
_O_NOINHERIT_O_NOINHERIT Impide que se cree un descriptor de archivo compartido.Prevents creation of a shared file descriptor.
_O_RANDOM_O_RANDOM Especifica que el almacenamiento en caché está optimizado para el acceso aleatorio (pero no restringido a este) desde el disco.Specifies that caching is optimized for, but not restricted to, random access from disk.
_O_RDONLY_O_RDONLY Abre un archivo únicamente para leerlo.Opens a file for reading only. No se puede especificar con _O_RDWR o _O_WRONLY.Cannot be specified with _O_RDWR or _O_WRONLY.
_O_RDWR_O_RDWR Abre un archivo tanto para lectura como para escritura.Opens a file for both reading and writing. No se puede especificar con _O_RDONLY o _O_WRONLY.Cannot be specified with _O_RDONLY or _O_WRONLY.
_O_SEQUENTIAL_O_SEQUENTIAL Especifica que el almacenamiento en caché está optimizado para el acceso secuencial (pero no restringido a este) desde el disco.Specifies that caching is optimized for, but not restricted to, sequential access from disk.
_O_TEXT_O_TEXT Abre un archivo en modo de texto (traducido).Opens a file in text (translated) mode. (Para obtener más información, vea E/S de archivo en modo binario y de texto y fopen).(For more information, see Text and Binary Mode File I/O and fopen.)
_O_TRUNC_O_TRUNC Abre un archivo y lo trunca a longitud cero. El archivo debe tener permiso de escritura.Opens a file and truncates it to zero length; the file must have write permission. No se puede especificar con _O_RDONLY.Cannot be specified with _O_RDONLY. _O_TRUNC utilizado con _O_CREAT abre un archivo existente o crea un archivo._O_TRUNC used with _O_CREAT opens an existing file or creates a file. Nota: La marca _O_TRUNC destruye el contenido del archivo especificado.Note: The _O_TRUNC flag destroys the contents of the specified file.
_O_WRONLY_O_WRONLY Abre un archivo únicamente para escribir en él.Opens a file for writing only. No se puede especificar con _O_RDONLY o _O_RDWR.Cannot be specified with _O_RDONLY or _O_RDWR.
_O_U16TEXT_O_U16TEXT Abre un archivo en modo Unicode UTF-16.Opens a file in Unicode UTF-16 mode.
_O_U8TEXT_O_U8TEXT Abre un archivo en modo Unicode UTF-8.Opens a file in Unicode UTF-8 mode.
_O_WTEXT_O_WTEXT Abre un archivo en modo Unicode.Opens a file in Unicode mode.

Para especificar el modo de acceso a archivos, debe especificar _O_RDONLY, _O_RDWR o _O_WRONLY.To specify the file access mode, you must specify either _O_RDONLY, _O_RDWR, or _O_WRONLY. No existe un valor predeterminado para el modo de acceso.There is no default value for the access mode.

Cuando un archivo se abre en modo Unicode mediante _O_WTEXT, _O_U8TEXT o _O_U16TEXT, las funciones de entrada traducen los datos que se leen del archivo a datos UTF-16 almacenados como tipo wchar_t .When a file is opened in Unicode mode by using _O_WTEXT, _O_U8TEXT, or _O_U16TEXT, input functions translate the data that's read from the file into UTF-16 data stored as type wchar_t. Las funciones que escriben en un archivo abierto en modo Unicode esperan búferes que contengan datos UTF-16 almacenados como de tipo wchar_t .Functions that write to a file opened in Unicode mode expect buffers that contain UTF-16 data stored as type wchar_t. Si el archivo está codificado como UTF-8, los datos UTF-16 se traducen a UTF-8 cuando se escriben, y el contenido codificado en UTF-8 del archivo se traduce a UTF-16 cuando se lee.If the file is encoded as UTF-8, then UTF-16 data is translated into UTF-8 when it is written, and the file's UTF-8-encoded content is translated into UTF-16 when it is read. Si se intenta leer o escribir un número impar de bytes en el modo Unicode, se producirá un error de validación de parámetros.An attempt to read or write an odd number of bytes in Unicode mode causes a parameter validation error. 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.To read or write data that's stored in your program as UTF-8, use a text or binary file mode instead of a Unicode mode. Cualquier traducción de codificación que sea necesaria es su responsabilidad.You are responsible for any required encoding translation.

Si se llama a _sopen con _O_WRONLY | _O_APPEND (modo append) y _O_WTEXT, _O_U16TEXT o _O_U8TEXT, primero intenta abrir el archivo para lectura y escritura, leer la marca Bom y volver a abrirlo únicamente para escritura.If _sopen is called with _O_WRONLY | _O_APPEND (append mode) and _O_WTEXT, _O_U16TEXT, or _O_U8TEXT, it first tries to open the file for reading and writing, read the BOM, then reopen it for writing only. 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.If opening the file for reading and writing fails, it opens the file for writing only and uses the default value for the Unicode mode setting.

El argumento shflag es una expresión constante formada por una de las constantes de manifiesto siguientes, que se definen en <share.h> .The argument shflag is a constant expression consisting of one of the following manifest constants, which are defined in <share.h>.

shflag constante)shflag constant ComportamientoBehavior
_SH_DENYRW_SH_DENYRW Deniega el acceso de lectura y escritura a un archivo.Denies read and write access to a file.
_SH_DENYWR_SH_DENYWR Deniega el acceso de escritura a un archivo.Denies write access to a file.
_SH_DENYRD_SH_DENYRD Deniega el acceso de lectura a un archivo.Denies read access to a file.
_SH_DENYNO_SH_DENYNO Permite el acceso de lectura y escritura.Permits read and write access.

El argumento PMODE solo es necesario cuando se especifica _O_CREAT .The pmode argument is required only when _O_CREAT is specified. 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.If the file does not exist, pmode specifies the file's permission settings, which are set when the new file is closed the first time. De lo contrario, PMODE se omite.Otherwise, pmode is ignored. PMODE es una expresión de tipo entero que contiene una o las dos constantes de manifiesto _S_IWRITE y _S_IREAD, que se definen en <sys\stat.h> .pmode is an integer expression that contains one or both of the manifest constants _S_IWRITE and _S_IREAD, which are defined in <sys\stat.h>. Cuando ambas constantes se proporcionan, se combinan con el operador bit a bit OR.When both constants are given, they are combined with the bitwise-OR operator. El significado de PMODE es el siguiente.The meaning of pmode is as follows.

pmodepmode SignificadoMeaning
_S_IREAD_S_IREAD Solo se permite la lectura.Only reading permitted.
_S_IWRITE_S_IWRITE Escritura permitida.Writing permitted. (De hecho, se permiten la lectura y escritura).(In effect, permits reading and writing.)
_S_IREAD | _S_IWRITE_S_IREAD | _S_IWRITE Lectura y escritura permitidas.Reading and writing permitted.

Si no se ha concedido el permiso de escritura, el archivo será de solo lectura.If write permission is not given, the file is read-only. En el sistema operativo Windows, todos los archivos se pueden leer; es decir, no se puede conceder permisos únicamente de escritura.In the Windows operating system, all files are readable; it is not possible to give write-only permission. Por lo tanto, los modos _S_IWRITE y _S_IREAD | _S_IWRITE son equivalentes.Therefore, the modes _S_IWRITE and _S_IREAD | _S_IWRITE are equivalent.

_sopen aplica la máscara de permisos de archivo actual a PMODE antes de que se establezcan los permisos._sopen applies the current file-permission mask to pmode before the permissions are set. (Vea _umask.)(See _umask.)

RequisitosRequirements

RutinaRoutine Encabezado necesarioRequired header Encabezado opcionalOptional header
_sopen_sopen <io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h><fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>
_wsopen_wsopen <io.h> o <wchar.h><io.h> or <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h><fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>

Para obtener más información sobre compatibilidad, vea Compatibility.For more compatibility information, see Compatibility.

EjemploExample

Vea el ejemplo de _locking.See the example for _locking.

Consulta tambiénSee also

E/s de bajo nivelLow-Level I/O
_close_close
_creat, _wcreat_creat, _wcreat
fopen, _wfopenfopen, _wfopen
_fsopen, _wfsopen_fsopen, _wfsopen
_open, _wopen_open, _wopen