Partilhar via


_get_osfhandle

Recupera o identificador de arquivo do sistema operacional associado ao descritor do arquivo especificado.

Sintaxe

intptr_t _get_osfhandle(
   int fd
);

Parâmetros

fd
Um descritor de arquivo existente.

Valor retornado

Retorna um identificador de arquivo do sistema operacional se fd for válido. Caso contrário, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, retornará INVALID_HANDLE_VALUE (-1). Ele também definirá errno como EBADF, indicando um identificador de arquivo inválido. Para evitar um aviso quando o resultado for usado como um identificador de arquivo do Win32, converta-o em um tipo HANDLE.

Observação

Quando stdin, stdout e stderr não estão associados a um fluxo (por exemplo, em um aplicativo do Windows sem uma janela de console), os valores do descritor de arquivo para esses fluxos são retornados de _fileno como o valor especial -2. Da mesma forma, se você usar um 0, 1 ou 2 como o parâmetro do descritor de arquivo em vez do resultado de uma chamada a _fileno, _get_osfhandle também retornará o valor especial -2 quando o descritor de arquivo não estiver associado a um fluxo e não definir errno. No entanto, esse não é um valor válido do identificador de arquivo e as chamadas subsequentes que tentam usá-lo provavelmente falharão.

Para obter mais informações sobre EBADF e outros códigos de erro, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

Para fechar um arquivo cujo identificador de arquivo do SO (sistema operacional) é obtido por _get_osfhandle, chame _close no descritor de arquivo fd. Nunca chame CloseHandle no valor retornado dessa função. O identificador de arquivo do sistema operacional subjacente pertence ao descritor de arquivo fd e é fechado quando _close é chamado em fd. Se o descritor de arquivo pertencer a um fluxo FILE *, uma chamada para fclose nesse fluxo FILE * fechará o descritor de arquivo e o identificador de arquivo do sistema operacional subjacente. Nesse caso, não chame _close no descritor de arquivo.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
_get_osfhandle <io.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Confira também

Manipulação de arquivos
_close
_creat, _wcreat
_dup, _dup2
_open, _wopen
_open_osfhandle