Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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