Partilhar via


_open, _wopen

Abre um arquivo. Essas funções foram preteridas porque versões mais seguras estão disponíveis; ver _sopen_s, _wsopen_s.

Sintaxe

int _open(
   const char *filename,
   int oflag [,
   int pmode]
);
int _wopen(
   const wchar_t *filename,
   int oflag [,
   int pmode]
);

Parâmetros

filename
Nome do arquivo.

oflag
O tipo de operações permitidas.

pmode
Modo de permissão.

Valor de retorno

Cada uma dessas funções retorna um descritor de arquivo para o arquivo aberto. Um valor de retorno de -1 indica um erro; nesse caso errno , é definido como um dos seguintes valores.

errno valor Condição
EACCES Tentou abrir um arquivo somente leitura para gravação, o modo de compartilhamento do arquivo não permite as operações especificadas ou o caminho dado é um diretório.
EEXIST _O_CREAT e _O_EXCL bandeiras especificadas, mas filename já existem.
EINVAL Inválido oflag ou pmode argumento.
EMFILE Não há mais descritores de arquivo disponíveis (muitos arquivos estão abertos).
ENOENT Arquivo ou caminho não encontrado.

Para obter mais informações sobre esses e outros códigos de retorno, consulte errno, _doserrno, _sys_errliste _sys_nerr.

Observações

A _open função abre o arquivo especificado por filename e o prepara para leitura ou gravação, conforme especificado pelo oflag. _wopené uma versão de caracteres largos de ; o filename argumento para _wopen é uma cadeia de _opencaracteres largos. _wopen e _open comportar-se de forma idêntica de outra forma.

Mapeamentos de rotina de texto genérico

<tchar.h> rotina _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_topen _open _open _wopen

oflag é uma expressão inteira formada a partir de uma ou mais das seguintes constantes manifestas ou combinações constantes, que são definidas em <fcntl.h>.

oflag constante Comportamento
_O_APPEND Move o ponteiro do arquivo para o final do arquivo antes de cada operação de gravação.
_O_BINARY Abre o arquivo no modo binário (não traduzido). (Consulte fopen para obter uma descrição do modo binário.)
_O_CREAT Cria um arquivo e o abre para gravação. Não tem efeito se o arquivo especificado por filename existir. O pmode argumento é necessário quando _O_CREAT é especificado.
_O_CREAT | _O_SHORT_LIVED Cria um arquivo como temporário e, se possível, não é liberado para o disco. O pmode argumento é necessário quando _O_CREAT é especificado.
_O_CREAT | _O_TEMPORARY Cria um arquivo como temporário; O arquivo é excluído quando o último descritor de arquivo é fechado. O pmode argumento é necessário quando _O_CREAT é especificado. Para preservar o comportamento herdado para compatibilidade de aplicativos, outros processos não são impedidos de excluir esse arquivo.
_O_CREAT | _O_EXCL Retorna um valor de erro se existir um arquivo especificado por filename . Aplica-se apenas quando utilizado com _O_CREAT.
_O_NOINHERIT Impede a criação de um descritor de arquivo compartilhado.
_O_RANDOM Especifica que o cache é otimizado para, mas não restrito a, acesso aleatório do disco.
_O_RDONLY Abre um arquivo somente para leitura. Não é possível especificar com _O_RDWR ou _O_WRONLY.
_O_RDWR Abre um arquivo para leitura e gravação. Não é possível especificar com _O_RDONLY ou _O_WRONLY.
_O_SEQUENTIAL Especifica que o cache é otimizado para, mas não restrito a, acesso sequencial do disco.
_O_TEXT Abre um arquivo no modo de texto ANSI (traduzido). Para obter mais informações, consulte E/S de arquivo de texto e modo binário e fopen.
_O_TRUNC Abre um arquivo e o trunca para comprimento zero; O arquivo deve ter permissão de gravação. Não é possível especificar com _O_RDONLY. _O_TRUNC usado com _O_CREAT abre um arquivo existente ou cria um arquivo. Observação: O _O_TRUNC sinalizador destrói o conteúdo do arquivo especificado.
_O_WRONLY Abre um ficheiro apenas para escrita. Não é possível especificar com _O_RDONLY ou _O_RDWR.
_O_U16TEXT Abre um arquivo no modo Unicode UTF-16.
_O_U8TEXT Abre um arquivo no modo Unicode UTF-8.
_O_WTEXT Abre um arquivo no modo Unicode.

Para especificar o modo de acesso ao arquivo, você deve especificar _O_RDONLY, _O_RDWRou _O_WRONLY. Não há nenhum valor padrão para o modo de acesso.

Se _O_WTEXT for usado para abrir um arquivo para leitura, _open lê o início do arquivo e verifica se há uma marca de ordem de bytes (BOM). Se houver uma lista técnica, o arquivo será tratado como UTF-8 ou UTF-16LE, dependendo da lista técnica. Se nenhuma lista técnica estiver presente, o arquivo será tratado como ANSI. Quando um arquivo é aberto para gravação usando _O_WTEXTo , UTF-16 é usado. Independentemente de qualquer configuração anterior ou marca de ordem de bytes, se _O_U8TEXT for usado, o arquivo é sempre aberto como UTF-8, se _O_U16TEXT for usado, o arquivo é sempre aberto como UTF-16.

Quando um arquivo é aberto no modo Unicode usando _O_WTEXT, _O_U8TEXTou _O_U16TEXT, as funções de entrada convertem os dados lidos do arquivo em dados UTF-16 armazenados como tipo wchar_t. As funções que gravam em um arquivo aberto no modo Unicode esperam buffers que contenham dados UTF-16 armazenados como tipo wchar_t. Se o arquivo for codificado como UTF-8, os dados UTF-16 serão convertidos em UTF-8 quando forem gravados. O conteúdo codificado em UTF-8 do arquivo é traduzido para UTF-16 quando é lido. Uma tentativa de ler ou gravar um número ímpar de bytes no modo Unicode causa um erro de validação de parâmetro. Para ler ou gravar dados armazenados em seu programa como UTF-8, use um modo de texto ou arquivo binário em vez de um modo Unicode. Você é responsável por qualquer tradução de codificação necessária.

Se _open for chamado com _O_WRONLY | _O_APPEND (modo de acréscimo) e _O_WTEXT, _O_U16TEXTou , ele _O_U8TEXTprimeiro tentar abrir o arquivo para leitura e gravação, leia a lista técnica e, em seguida, reabra-o apenas para gravação. Se a abertura do arquivo para leitura e gravação falhar, ele abrirá o arquivo somente para gravação e usará o valor padrão para a configuração do modo Unicode.

Quando duas ou mais constantes de manifesto são usadas para formar o oflag argumento, as constantes são combinadas com o operador bitwise-OR ( | ). Para uma discussão sobre os modos binário e de texto, consulte E/S de arquivo de texto e modo binário.

O pmode argumento é necessário apenas quando _O_CREAT é especificado. Se o arquivo já existir, pmode será ignorado. Caso contrário, pmode especifica as configurações de permissão de arquivo, que são definidas quando o novo arquivo é fechado pela primeira vez. _open Aplica a máscara de permissão de arquivo atual a pmode antes que as permissões sejam definidas. Para obter mais informações, consulte _umask. pmode é uma expressão inteira que contém uma ou ambas as constantes de manifesto a seguir, que são definidas em <sys\stat.h>.

pmode Significado
_S_IREAD Só é permitida a leitura.
_S_IWRITE Escrita permitida. (Com efeito, permite a leitura e a escrita.)
_S_IREAD | _S_IWRITE Leitura e escrita permitidas.

Quando ambas as constantes são dadas, elas são unidas com o operador bitwise-OR ( | ). No Windows, todos os arquivos são legíveis; A permissão somente gravação não está disponível. Portanto, os modos _S_IWRITE e _S_IREAD | _S_IWRITE são equivalentes.

Se um valor diferente de alguma combinação de e _S_IWRITE for especificado para pmode—mesmo que especifique um válido pmode em outro sistema operacional—ou se qualquer valor diferente dos valores permitidos oflag for especificado, a função gerará uma asserção no modo de depuração e invocará o manipulador de _S_IREAD parâmetros inválido, conforme descrito em Validação de parâmetros. Se a execução for permitida para continuar, a função retorna -1 e define errno como EINVAL.

Requerimentos

Função Cabeçalho obrigatório Cabeçalho opcional
_open <io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>
_wopen <io.h> ou <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>

_open e _wopen são extensões da Microsoft. Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Bibliotecas

Todas as versões das bibliotecas de tempo de execução do C.

Exemplo

// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>

int main( void )
{
   int fh1, fh2;

   fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
   // Note: _open is deprecated; consider using _sopen_s instead
   if( fh1 == -1 )
      perror( "Open failed on input file" );
   else
   {
      printf( "Open succeeded on input file\n" );
      _close( fh1 );
   }

   fh2 = _open( "CRT_OPEN.OUT",
                _O_WRONLY | _O_CREAT,
                _S_IREAD | _S_IWRITE ); // C4996
   if( fh2 == -1 )
      perror( "Open failed on output file" );
   else
   {
      printf( "Open succeeded on output file\n" );
      _close( fh2 );
   }
}

Resultado

Open succeeded on input file
Open succeeded on output file

Ver também

E/S de baixo nível
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen