_get_osfhandle
Recupera el identificador de archivo del sistema operativo asociado al descriptor de archivo especificado.
Sintaxis
intptr_t _get_osfhandle(
int fd
);
Parámetros
fd
Descriptor del archivo existente.
Valor devuelto
Devuelve un identificador de archivo del sistema operativo si fd
es válido. De lo contrario, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si se permite que la ejecución continúe, devuelve INVALID_HANDLE_VALUE
(-1). También establece errno
en EBADF
, lo que indica un identificador de archivo no válido. Para evitar una advertencia cuando el resultado se usa como identificador de archivo Win32, conviértalo a un tipo HANDLE
.
Nota:
Cuando stdin
, stdout
y stderr
no están asociados a un flujo (por ejemplo, en una aplicación de Windows sin una ventana de consola), los valores del descriptor de archivo para estos flujos se devuelven desde _fileno
como el valor especial -2. De forma similar, si usa 0, 1 o 2 como parámetro descriptor de archivo en lugar del resultado de una llamada a _fileno
, _get_osfhandle
también devuelve el valor especial -2 cuando el descriptor de archivo no está asociado a ningún flujo y no establece errno
. Sin embargo, este no es un valor de identificador de archivo válido y es probable que se produzcan errores en las llamadas subsiguientes que intenten usarlo.
Para obtener más información sobre EBADF
y otros códigos de error, consulte errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Comentarios
Para cerrar un archivo cuyo identificador de archivos del sistema operativo (SO) se obtiene mediante _get_osfhandle
, llame a _close
en el descriptor de archivo fd
. Nunca llame a CloseHandle
en el valor devuelto de esta función. El identificador de archivos del sistema operativo subyacente es propiedad del descriptor de archivo fd
y se cierra cuando se llama a _close
en fd
. Si el descriptor del archivo pertenece a un flujo FILE *
, al llamar a fclose
en ese flujo FILE *
se cierra tanto el descriptor del archivo como el identificador de archivos del sistema operativo subyacente. En este caso, no llame a _close
en el descriptor del 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.
Requisitos
Routine | Encabezado necesario |
---|---|
_get_osfhandle |
<io.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Consulte también
Control de archivos
_close
_creat
, _wcreat
_dup
, _dup2
_open
, _wopen
_open_osfhandle