Partilhar via


_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

Consulte também

Referência

E/S de fluxo

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen