_fdopen, _wfdopen
Associa um fluxo de um arquivo que foi aberto anteriormente para i/O baixo nível.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parâmetros
fd
Arquivo de descritor de arquivo aberto.mode
Tipo de acesso de arquivo.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o fluxo aberto.Um valor de ponteiro nulo indica um erro.Quando ocorre um erro, o manipulador de parâmetro inválido é chamado, conforme descrito em Validação de parâmetro.Se execução tiver permissão para continuar, errno é definir EBADF, que indica um descritor de arquivo incorreto ou EINVAL, que indica que mode foi um ponteiro nulo.
Para obter mais informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist e _sys_nerr.
Comentários
O _fdopen função associa um fluxo de i/O com o arquivo identificado por fde assim permite que um arquivo é aberto para nível baixo e/S em buffer e formatado._wfdopené uma versão de caractere largo de _fdopen; o mode argumento para _wfdopen é uma seqüência de caracteres largos._wfdopene _fdopen contrário tenham comportamento idêntico.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.h |
Unicode e MBCS do arquivo não definido |
MBCS do arquivo definido |
Unicode definido |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
O mode seqüência de caracteres Especifica o tipo de arquivo e acesso ao arquivo.
A seqüência de caracteres mode Especifica o tipo de acesso solicitado para o arquivo, como mostrado na tabela a seguir.
"r"
É aberto para leitura.Se o arquivo não existe ou não for encontrado, o fopen chamada falhar."w"
Abre um arquivo vazio para gravação.Se o arquivo existir, seu conteúdo é destruído."a"
É aberto para gravação no final do arquivo (acrescentar).Cria o arquivo se ele não existe."r+"
É aberto para leitura e gravação.(O arquivo deve existir)."w+"
Abre um arquivo vazio para leitura e gravação.Se o arquivo existir, seu conteúdo é destruído."a+"
É aberto para leitura e acrescentando.Cria o arquivo se ele não existe.
Quando um arquivo é aberto com o "a" ou "a+" acesso tipo, tudo gravar operações ocorrerem no final do arquivo.O ponteiro do arquivo pode ser reposicionado usando fseek ou rewind, mas ele é sempre movido para o final do arquivo antes de qualquer gravação operação é executada.Assim, os dados existentes não podem ser substituídos.Quando o "r+", "w+", ou "a+" tipo de acesso é especificado, leitura e gravação são permitidas (o arquivo disse estar aberto para "update").No entanto, quando você alterna entre a leitura e gravação, deve haver um interveniente fflush, fsetpos, fseek, ou rewind operação.Você pode especificar a posição atual para o fsetpos ou fseek operação, se você quiser.
Com os valores acima, os caracteres a seguir podem ser incluídos em mode para especificar o modo de conversão de caracteres de nova linha.
t
Abrir em texto (traduzido) modo.Nesse modo, combinações do carro (CR-LF) de alimentação de linha de retorno são traduzidas em feeds de uma linha (LF) na entrada e caracteres de LF são convertidas em combinações de CR-LF na saída.Além disso, Ctrl + Z é interpretado como um caractere de final de arquivo na entrada.Em arquivos abertos para leitura/gravação, fopen verifica um Ctrl + Z no final do arquivo e remove, se possível.Isso é feito porque usando o fseek e ftell funções para mover dentro de um arquivo que termina com um Ctrl + Z podem causar fseek se comporte incorretamente perto do final do arquivo.b
Abrir no modo binário (não traduzido).As traduções de t modo são suprimidas.c
Habilitar o sinalizador de confirmação associados filename para que o conteúdo do buffer de arquivo é gravado diretamente no disco se fflush ou _flushall é chamado.n
Redefinir o sinalizador de confirmação associados filename para "não-confirmação". Este é o padrão.Ela também substitui o sinalizador de confirmação global se vincular seu programa com Commode.obj.O padrão de sinalizador de confirmação global é "não-confirmação" a menos que você explicitamente vincular seu programa com Commode.obj.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.Não as use se você quiser preservar a portabilidade do ANSI.
Se t ou b não é fornecido na mode, o modo de conversão padrão é definido pela variável global _fmode.Se t ou b é o prefixo para o argumento, a função falha e retorna NULL.Para uma discussão do texto e modos binários, consulte texto e binário e/S de arquivo de modo.
Caracteres válidos para o mode seqüência de caracteres usada na fopen e _fdopen correspondem a oflag argumentos usados na Open e _sopen, da seguinte forma.
Caracteres em mode seqüência de caracteres |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR(usually _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