_fsopen, _wfsopen
Abra una secuencia con el uso compartido de archivos.
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parámetros
filename
Nombre del archivo a abrir.mode
Tipo de acceso permitido.shflag
Tipo de uso compartido permitido.
Valor devuelto
Cada una de estas funciones devuelve un puntero a la secuencia. Un valor de puntero null indica un error. Si filename o mode es NULL o una cadena vacía, estas funciones se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven NULL y establecen errno en EINVAL.
Para obtener más información sobre estos y otros códigos error, vea _doserrno, errno, _sys_errlist y _sys_nerr.
Comentarios
La función de _fsopen abre el archivo especificado por filename como secuencia y prepara el archivo para leer o escribir compartida posterior, tal como se define en el modo y los argumentos de shflag . _wfsopen es una versión con caracteres anchos de _fsopen; los argumentos de filename y de mode a _wfsopen son cadenas de caracteres. Por lo demás, _wfsopen y _fsopen se comportan de forma idéntica.
Cadena de caracteres mode especifica el tipo de acceso solicitado para el archivo, como se muestra en la tabla siguiente.
Término |
Definición |
---|---|
"r" |
Abre para lectura. Si el archivo no existe o no se encuentra, la llamada de _fsopen produce un error. |
"w" |
Abre un archivo vacío para escritura. Si el archivo especificado existe, se destruye su contenido. |
"a" |
Abrir para escribir al final del archivo (el anexar); crea el archivo primero si no existe. |
"r+" |
Abre para lectura y escritura. (El archivo debe existir.) |
"w+" |
Abre un archivo vacío para lectura y escritura. Si el archivo especificado existe, se destruye su contenido. |
"a+" |
Abrir para leer y anexar; crea el archivo primero si no existe. |
Use los tipos "w" y "w+" con cuidado, ya que podrían destruir archivos existentes.
Si se abre con el tipo de acceso de "a" o de "a+" , todas las operaciones de escritura aparecen al final del archivo. El puntero de archivo se puede mover mediante fseek o rewind, pero se mueve siempre al final del archivo antes de que se realice cualquier operación de escritura. Por consiguiente, los datos existentes no pueden sobrescribirse. Cuando se especifica "r+", "w+", o el tipo de acceso de "a+" , se permiten la lectura y escritura (el archivo se abre para la actualización). Sin embargo, al cambiar entre la lectura y escritura, debe haber fsetposintermedia, fseek, u operación de rebobinado . Si se desea, se puede especificar la posición actual para la operación fsetpos o fseek. Además de los valores anteriores, uno de los siguientes caracteres se puede incluir en mode para especificar el de modalidad de traducción para las nuevas líneas, y para la administración de archivos.
Término |
Definición |
---|---|
t |
Abra un archivo en modo de texto (traducido). En este modo, las combinaciones de fuentes de la retorno- línea de carro (CR-LF) se convierten en los únicos saltos de línea (LF) en entrada y caracteres de LF se traducen a las combinaciones de CR-LF en la salida. Además, CTRL+Z se interpreta como carácter de final de archivo en la entrada. En archivos abierto para lectura o lectura/escritura, comprobaciones de _fsopen un CTRL+Z al final del archivo y colóquelo, si es posible. Se hace esto porque utilizar fseek y ftell para desplazarse en un archivo que termina con un CTRL+Z podría hacer fseek para comportarse incorrectamente cerca del final del archivo. |
b |
Abra un archivo en modo (sin traducir) binario; se suprimen las conversiones anteriores. |
S |
Especifica que el almacenamiento en caché está optimizado para el acceso secuencial (pero no restringido a este) desde el disco. |
R |
Especifica que el almacenamiento en caché está optimizado para el acceso aleatorio (pero no restringido a este) desde el disco. |
T |
Especifica un archivo como temporal. Si es posible, no se vuelca en el disco. |
D |
Especifica un archivo como temporal. Se elimina cuando se cierra el puntero del último archivo. |
Si t o b no se proporcione en mode, el de modalidad de traducción está definida por la variable _fmodede valor por defecto- modo. Si se agrega t o b como prefijo al argumento, se produce un error en la función y devuelve NULL. Para obtener información sobre los modos de texto y binario, vea E/S de archivo de modo de texto y binario.
El argumento shflag es una expresión constante el constar de las constantes de manifiesto siguientes, definidos en Share.h.
Término |
Definición |
---|---|
_SH_COMPAT |
Establece el modo de compatibilidad para las aplicaciones de 16 bits. |
_SH_DENYNO |
Permite el acceso de lectura y escritura. |
_SH_DENYRD |
Deniega el acceso de lectura al archivo. |
_SH_DENYRW |
Deniega el acceso de lectura y escritura al archivo. |
_SH_DENYWR |
Deniega el acceso de escritura al archivo. |
Asignaciones de rutina de texto genérico
Rutina Tchar.h |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Requisitos
Función |
Encabezado necesario |
Encabezados opcionales |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> Para la constante de manifiesto para el parámetro de shflag . |
_wfsopen |
<stdio.h> o <wchar.h> |
<share.h> Para la constante de manifiesto para el parámetro de shflag . |
Ejemplo
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}