_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