_fdopen, _wfdopen
Associa um fluxo de um arquivo que anteriormente foi aberto para E/s de nível inferior.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parâmetros
fd
Descritor de arquivo do arquivo em aberto.mode
Tipo de acesso a arquivos.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o fluxo em 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 a execução for permitida para continuar, errno um é definido como EBADF, indicando um descritor de arquivo inválido, ou EINVAL, que indica que mode era 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
The _fdopen função associa o arquivo identificado por um fluxo de I/O fd, permitindo que um arquivo aberto para E/s de baixo nível sejam armazenados em buffer e formatado. _wfdopen é uma versão de caractere largo da _fdopen; o mode argumento para _wfdopen é uma seqüência de caracteres largos. _wfdopen e _fdopen tenham comportamento idêntico caso contrário.
Mapeamentos de rotina de texto genérica
Rotina tchar.h |
_UNICODE e _MBCS não definido |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
The mode seqüência de caractere Especifica o tipo de arquivo e o acesso ao arquivo.
O caractere de seqüência de caracteres mode Especifica o tipo de acesso solicitado para o arquivo, sistema autônomo mostrado na tabela seguinte.
"r"
Será aberto para leitura.Se o arquivo não existe ou não for encontrado, o fopen Chame falhar."w"
Abre um arquivo vazio para gravação.Se existir o arquivo fornecido, seu Sumário será destruído."a"
É aberto para gravação no participante do arquivo (acrescentar); cria o arquivo primeiro se não existir."r+"
Será aberto para leitura e gravação.(O arquivo deve existir)."w+"
Abre um arquivo vazio para ler e gravar.Se existir o arquivo fornecido, seu Sumário será destruído."a+"
É aberto para leitura e acrescentando; cria o arquivo primeiro se não existir.
Quando um arquivo for aberto com o "a" ou "a+" tipo de acesso gravar todas as operações ocorrem ao participante do arquivo. O ponteiro do arquivo pode ser reposicionado fseek ou rewind, mas é sempre retornado ao participante do arquivo antes de escrever nenhuma operação é executada. Assim, os dados existentes não podem ser substituídos.Quando o "r+", "w+", ou "a+"tipo de acesso for especificado, tanto leitura e gravação são permitidos (o arquivo é considerado em aberto para "atualização"). No entanto, quando você alterna entre a leitura e gravação, deve haver um intermediárias fflush, fsetpos, fseek, ou rewind operação. A posição corrente pode ser especificada para o fsetpos ou fseek operação, se desejado.
Juntamente com os valores acima, os caracteres a seguir podem ser incluídos em mode Para especificar o modo de tradução de caracteres de nova linha.
t
em em aberto em texto (convertida) modo.Nesse modo, combinações de carro return–line de feed (CR-LF) são transformadas em alimentações de linha (LF) na entrada e caracteres de LF são convertidos em combinações de CR-LF na saída.Além disso, CTRL+Z é interpretado sistema autônomo um caractere de participante de arquivo na entrada.Em arquivos abertos para leitura/gravação, fopen verifica um CTRL+Z no participante do arquivo e remove-lo, se possível. Isso é concluído porque usando o fseek e ftell podem fazer com que funções para mover dentro de um arquivo que termine com um CTRL+Z fseek se comporte incorretamente no participante do arquivo.b
em em aberto no modo binário (não traduzido); as traduções acima são suprimidas.c
Ativar o sinalizar de confirmar para o associado filename para que o Sumário do buffer de arquivo é gravado diretamente no disco se qualquer uma fflush ou _flushall é chamado.n
reiniciar o sinalizar de confirmar para o associado filenamepara "não-confirmar". Este é o padrão.Ela também substitui o sinalizar de confirmar global se você vincular o seu programa com Commode.obj.O padrão de sinalizar de confirmar global é "não-confirmar", a menos que você vincula seu programa com Commode.obj explicitamente.S
Especifica que o cache é otimizado para, mas não restrito a, acesso seqüencial do disco.R
Especifica que o cache é otimizado para, mas não restrito a, acesso aleatório do disco.T
Especifica um arquivo sistema autônomo temporário.Se possível, ele não é liberado para o disco.D
Especifica um arquivo sistema autônomo temporário.Ele é excluído quando o último descritor de arquivo é fechado.
The t, c, and n mode options are Microsoft extensions for fopen and _fdopen and should not be used where ANSI portability is desired.
If t ou b não é fornecido na mode, o modo de tradução padrão é definido pela variável global _fmode.If t ou b tem o prefixo para o argumento, a função falha e retorna NULL. Para obter uma abordagem de texto e modos de binários, consulte Texto e o modo binário E/s de arquivos.
Caracteres válido para o mode seqüência de caracteres usada na fopen e _fdopen corresponde a oflag argumentos usados na _Open and _sopen, sistema autônomo segue.
Caracteres em mode seqüência de caracteres |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND (normalmente _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (normalmente _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (normalmente _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (normalmente _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Nenhum |
n |
Nenhum |
S |
_O_SEQUENTIAL |
R |
_O_RANDOM |
T |
_O_SHORT_LIVED |
D |
_O_TEMPORARY |
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 na introdução.
Exemplo
// crt_fdopen.c
// This program opens a file 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 with 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
Equivalente do NET Framework
sistema::IO::FileStream::FileStream