_fdopen, _wfdopen
Associa um fluxo com um arquivo que é aberto anteriormente para E/S de baixo nível.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parâmetros
fd
O descritor do Arquivo aberto.mode
Tipo de acesso ao arquivo.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o fluxo aberto. Um valor nulo de ponteiro indica um erro. Quando ocorre um erro, o manipulador inválido do parâmetro será chamado, conforme descrito em Validação do parâmetro. Se a execução for permitida continuar, errno é um ou outro definido como EBADF, que indica um descritor de arquivo incorreto, ou a EINVAL, que indica que mode fosse um ponteiro nulo.
Para obter mais informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist, and _sys_nerr.
Comentários
A função de _fdopen associa um fluxo de E/S ao arquivo que é identificado por fd, e permite assim um arquivo que é aberto para que uma E/S de baixo nível é armazenado no buffer e formatados. _wfdopen é uma versão de caractere longo de _fdopen; o argumento mode para _wfdopen é uma cadeia de caractere longo. _wfdopen e _fdopen se comportam de outra forma idêntica.
Mapeamentos da rotina de texto genérico
Rotina Tchar.h |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
A cadeia de caracteres de mode especifica o tipo de arquivo e de acesso ao arquivo.
A cadeia de caracteres mode especifica o tipo de acesso solicitado para o arquivo, conforme mostrado na seguinte tabela.
"r"
Abre para leitura. Se o arquivo não existir ou não puder ser encontrado, a chamada fopen falhará."w"
Abre um arquivo vazio para gravação. Se o arquivo determinado existir, seu conteúdo será destruído."a"
É aberto para gravação, no final do arquivo (adicionar). Cria o arquivo se ele não existir."r+"
Abre para leitura e gravação. (O arquivo deve existir.)"w+"
Abre um arquivo vazio para a leitura e gravação. Se o arquivo determinado existir, seu conteúdo será destruído."a+"
Abre para leitura e acréscimo. Cria o arquivo se ele não existir.
Quando um arquivo é aberto com o tipo de acesso de "a" ou de "a+" , todas as operações de gravação ocorrem no final do arquivo. O ponteiro de arquivo pode ser reposicionado usando fseek ou rewind, mas sempre é movido de volta ao final do arquivo antes que qualquer operação de gravação foi executada. Portanto, os dados existentes não podem ser substituídos. Quando "r+", "w+" ou o tipo de acesso de "a+" é especificado, a leitura e a gravação são permitidas (o arquivo fica aberto para "atualização"). No entanto, quando você alternar entre a leitura e a gravação, deve haver fflushde intervenção, fsetpos, fseek, ou uma operação de rewind . Você pode especificar a posição atual da operação de fsetpos ou de fseek , se desejar que a.
Além dos valores acima, os seguintes caracteres também podem ser incluídos em mode para especificar o modo de conversão de caracteres de nova linha.
t
Abrir no modo de texto (traduzido). Nesse modo, a retorno- linha combinações de retorno de carro (CR-LF) é convertida em uma linha feeds (LF) na entrada, e os caracteres de LF são convertidos em combinações de CR-LF na saída. Além disso, Ctrl+Z é interpretado como um caractere de participante de Arquivo na entrada. Em arquivos abertos leitura/gravação, fopen verifica se há um Ctrl+Z no final do arquivo e solte-o, se possível. Isso é feito como usar as funções de fseek e de ftell para mover dentro de um arquivo que termina com um Ctrl+Z pode fazer com que fseek se com comportamento incorretamente no final do arquivo.b
Abrir no modo binário não traduzido (). Todas as traduções de modo de t são suprimida.c
Habilite o sinalizador de confirmação para o filename associado de modo que o conteúdo do buffer do arquivo seja gravado diretamente no disco se fflush ou _flushall for chamado.n
Redefinir o sinalizador de confirmação o filename associado a “sem confirmação”. Esse é o padrão. Também substitui o sinalizador global de confirmação se você vincular seu programa com Commode.obj. A opção global do sinalizador de confirmação é “não” confirmação a menos que você vincular explicitamente seu programa com Commode.obj.
t, c, e as opções de nmode são extensões da Microsoft para fopen e _fdopen. Não use se quiser preservar a portabilidade de ANSI.
Se t ou b não for fornecido em mode, o modo padrão de translação será definido pela variável global _fmode. Se t ou b for prefixado para o argumento, a função falhará e retornará NULL. Para obter uma descrição dos modos de texto e binários, consulte O modo de texto e binários de E/S.
Os caracteres válidos para a cadeia de caracteres de mode usada em fopen e em _fdopen correspondem aos argumentos de oflag usados em _open e em _sopen, como a seguir.
Caracteres na cadeia de caracteres de mode |
Valor de equivalentede oflagpara _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND (usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (geralmente _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (geralmente _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (geralmente _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Nenhum |
n |
Nenhum |
Requisitos
Função |
Cabeçalho necessário |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> ou <wchar.h> |
Para obter mais informações de compatibilidade, consulte Compatibilidade.
Exemplo
// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>
int main( void )
{
FILE *stream;
int fd, count = 0;
char inbuf[128];
// Open a file.
if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
exit( 1 );
// Get stream from file descriptor.
if( (stream = _fdopen( fd, "r" )) == NULL )
exit( 1 );
while( fgets( inbuf, 128, stream ) != NULL )
count++;
// After _fdopen, close by using fclose, not _close.
fclose( stream );
printf( "Lines in file: %d\n", count );
}
Entrada: crt_fdopen.txt
Line one
Line two
Saída
Lines in file: 2
Equivalência do .NET Framework
System::IO::FileStream::FileStream