_fsopen
, _wfsopen
Abre un flujo con uso compartido de archivos.
Sintaxis
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.
Valor devuelto
Cada una de estas funciones devuelve un puntero al flujo. Un valor de puntero null indica un error. Si filename
o es o mode
una NULL
cadena vacía, estas funciones invocan al controlador de parámetros no válidos, tal 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 de error, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Comentarios
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érmino | Definición |
---|---|
"r " |
Abre para lectura. Si el archivo no existe o no se encuentra, la llamada _fsopen genera un error. |
"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 (anexando); crea primero 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+ " |
Abre para leer y anexar; crea primero el archivo si no existe. |
Use los tipos "w
" y "w+
" con cuidado, ya que pueden 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 cambiar de posición mediante fseek
o rewind
, pero siempre se mueve al final del archivo antes de que se lleve a cabo cualquier operación de escritura. Por lo tanto, no se pueden sobrescribir los datos existentes. 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, si se cambia entre lectura y escritura, debe intervenir una operación fsetpos
, fseek
o rewind
. 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érmino | Definición |
---|---|
t |
Abre un archivo en modo de texto (traducido). En este modo, las combinaciones de retorno de carro-avance de línea (CR-LF) se traducen 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 quita porque usar fseek y ftell mover dentro de un archivo que termina con ctrl+Z puede provocar fseek que se comporte incorrectamente cerca del final del archivo. |
b |
Abre un archivo en modo binario (sin traducir); las conversiones anteriores se suprimen. |
D |
Especifica un archivo temporal que se elimina cuando se cierra el último puntero de archivo. |
R |
Especifica que el almacenamiento en caché está optimizado para el acceso aleatorio (pero no restringido a este) desde el disco. |
S |
Especifica que el almacenamiento en caché está optimizado para el acceso secuencial (pero no restringido a este) desde el disco. |
T |
Especifica un archivo que no se escribe en el disco a menos que la presión de memoria lo requiera. |
Si t
o b
no se da en mode
, el modo de traducción se define mediante la variable _fmode
de modo predeterminado . Si se agrega t
o b
como prefijo al argumento, se produce un error en la función y devuelve NULL
. Para obtener una descripción de los modos de texto y binario, consulte E/S de archivo en modo texto y en modo binario.
Con respecto a T
y D
:
T
evita escribir el archivo en disco siempre que la presión de memoria no la requiera. Para obtener más información, veaFILE_ATTRIBUTE_TEMPORARY
en Constantes de atributos de archivo y también esta entrada de blog Es solo temporal.D
especifica un archivo normal que se escribe en el disco. La diferencia es que se elimina automáticamente cuando se cierra. Puede combinarTD
para obtener ambas semánticas.
_fsopen
y _wfsopen
son variantes específicas de Microsoft de fopen
. No forman parte del estándar ANSI. Para una función más portátil y segura, si no necesita compartir archivos, considere _wfopen_s
o fopen_s
.
El argumento shflag
es una expresión constante compuesta por una de las constantes de manifiesto siguientes, que se definen en Share.h
.
Término | Definición |
---|---|
_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. |
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas 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 del parámetro shflag . |
_wfsopen |
<stdio.h> o <wchar.h> |
<share.h> Para la constante de manifiesto del parámetro 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" );
}
No one else in the network can write to this file until we are done.
Vea también
E/S de secuencia
fclose
, _fcloseall
_fdopen
, _wfdopen
ferror
_fileno
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen
_setmode
_sopen
, _wsopen