Compartir a través de


_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