_fsopen, _wfsopen

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Abre un flujo con 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 que se va a abrir.

mode
Tipo de acceso permitido.

shflag
Tipo de uso compartido permitido.

Cada una de estas funciones devuelve un puntero al flujo. Un valor de puntero null indica un error. Si filename o mode es NULL o una cadena vacía, estas funciones invocan el controlador de parámetros no válidos, como se describe en validación del parámetro. 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 de error, consulte _doserrno, errno, _sys_errlist y _sys_nerr.

La función _fsopen abre el archivo especificado por filename como un flujo y lo prepara para una lectura o escritura compartida posterior, como establecen los argumentos shflag y el modo. _wfsopen es una versión con caracteres anchos de _fsopen; los argumentos filename y mode para _wfsopen son cadenas de caracteres anchos. Por lo demás, _wfsopen y _fsopen se comportan de forma idéntica.

La cadena de caracteres mode especifica el tipo de acceso solicitado para el archivo, como se muestra en la tabla siguiente.

TérminoDefinición
"r"Abre para lectura. Si el archivo no existe o no se encuentra, la llamada de _fsopen falla.
"w"Abre un archivo vacío para escritura. Si el archivo especificado existe, se destruye su contenido.
"a"Se abre para escribir al final del archivo (anexo); primero crea el archivo 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+"Se abre para leer y anexar; primero crea el archivo si no existe.

Use los tipos "w" y "w+" con cuidado, ya que podrían destruir archivos existentes.

Cuando un archivo se abre con el tipo de acceso "a" o "a+", todas las operaciones de escritura se producen al final del archivo. El puntero de archivo se puede mover mediante fseek o rewind, pero se desplaza 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 el tipo de acceso "r+", "w+" o "a+", se permiten la lectura y la escritura (se dice que el archivo está abierto para actualización). Sin embargo, cuando se alterna entre lectura y escritura, debe haber un intermedia fsetpos, fseek, o rebobinar operación. 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 caracteres siguientes se puede incluir en mode para especificar el modo de traducción de las nuevas líneas y de la administración de archivos.

TérminoDefinición
tAbre un archivo en modo de texto (traducido). En este modo, las combinaciones de retorno de carro-avance de línea (CR-LF) se convierten en avances de una línea (LF) en la entrada, y los caracteres de LF se traducen en combinaciones de CR-LF en la salida. Además, CTRL+Z se interpreta como carácter de final de archivo en la entrada. En los archivos abiertos para lectura o lectura y escritura, _fsopen comprueba si hay un Ctrl+Z al final del archivo y lo quita, si es posible. Se hace así porque el uso de fseek y ftell para desplazarse por un archivo que finaliza con CTRL+Z puede hacer que fseek se comporte de forma incorrecta cerca del final del archivo.
bAbre un archivo en modo binario (sin traducir); las conversiones anteriores se suprimen.
SEspecifica que el almacenamiento en caché está optimizado para el acceso secuencial (pero no restringido a este) desde el disco.
REspecifica que el almacenamiento en caché está optimizado para el acceso aleatorio (pero no restringido a este) desde el disco.
TEspecifica un archivo como temporal. Si es posible, no se vuelca en el disco.
DEspecifica un archivo como temporal. Se elimina cuando se cierra el puntero del último archivo.

Si no se especifica t o b en mode, el modo de traducción está definido por la variable de modo predeterminado _fmode. Si se agrega t o b como prefijo al argumento, se produce un error en la función y devuelve NULL. Para obtener una explicación de los modos de texto y binarios, consulte texto y E/S de archivo binario de modo.

El argumento shflag es una expresión constante compuesta por una de las constantes de manifiesto siguientes, que se definen en Share.h.

TérminoDefinición
_SH_COMPATEstablece el modo de compatibilidad para aplicaciones de 16 bits.
_SH_DENYNOPermite el acceso de lectura y escritura.
_SH_DENYRDDeniega el acceso de lectura al archivo.
_SH_DENYRWDeniega el acceso de lectura y escritura al archivo.
_SH_DENYWRDeniega 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
FunciónEncabezado necesarioEncabezados opcionales
_fsopen<stdio.h><share.h>

Para la constante de manifiesto del parámetro shflag.
_wfsopen<stdio.h> o <wchar.h><share.h>

Para la constante de manifiesto del parámetro shflag.
// 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" );  
}  

No one else in the network can write to this file until we are done.  

E/S de secuencia
fclose, _fcloseall
_fdopen, _wfdopen
fError
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen

Mostrar: