_open, _wopen
Abre um arquivo. Essas funções foram preteridas porque versões mais seguras disponíveis; consulte _sopen_s, _wsopen_s.
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
Os tipos de operações permitidas.pmode
Modo de permissão.
Valor de retorno
Cada uma destas funções mostra um descritor de arquivo do arquivo aberto. Se o valor retornado for -1, é sinal de que há um erro. Nesse caso, a função errno é definida com um dos valores a seguir.
EACCES
Tentou abrir um arquivo somente leitura para modificá-lo, o modo de compartilhamento do arquivo não permite realizar as operações especificadas ou o caminho informado é um diretório.EEXIST
Os sinalizadores _O_CREAT e _O_EXCL foram especificados, mas filename já existe.EINVAL
Inválido oflag ou pmode argumento.EMFILE
Não há outros descritores de arquivos disponíveis (há muitos arquivos 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_errlist e _sys_nerr.
Comentários
A função _open abre o arquivo especificado por filename e o prepara para leitura ou gravação, como especificado pelo parâmetro oflag. A função _wopen é uma versão de caractere largo da função _open; o argumento filename para _wopen é uma cadeia de caracteres larga. Caso contrário, _wopen e _open se comportam de forma idêntica.
Mapeamentos da rotina de texto genérico
Rotina TCHAR. h |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag é uma expressão inteira formada por uma ou mais constantes manifestas ou combinações de constantes a seguir, definidas em <fcntl.h>.
_O_APPEND
Move o ponteiro para o final do arquivo antes de cada operação de gravação._O_BINARY
Abre o arquivo no modo binário (sem conversão). (Consulte fopen para obter uma descrição do modo binário.)_O_CREAT
Cria um arquivo e o abre para gravação. Não terá efeito algum se o arquivo especificado por filename já existir. O argumento pmode é necessário quando _O_CREAT é especificada._O_CREAT | _O_SHORT_LIVED
Cria um arquivo temporário e, se possível, não alinha com o disco. O argumento pmode é necessário quando _O_CREAT é especificada._O_CREAT | _O_TEMPORARY
Cria um arquivo temporário, que é excluído quando o último descritor de arquivo é fechado. O argumento pmode é necessário quando _O_CREAT é especificada._O_CREAT | _O_EXCL
Retorna um valor de erro se o arquivo especificado por filename existir. Aplica-se somente quando usado com _O_CREAT._O_NOINHERIT
Impede a criação de um descritor de arquivo compartilhado._O_RANDOM
Especifica que o cache é otimizado para acesso aleatório do disco, mas não se restringe a isso._O_RDONLY
Abre um arquivo somente leitura. Não pode ser especificado com _O_RDWR ou _O_WRONLY._O_RDWR
Abre um arquivo para leitura e gravação. Não pode ser especificado com _O_RDONLY ou _O_WRONLY._O_SEQUENTIAL
Especifica que o cache é otimizado para acesso sequencial do disco, mas não se restringe a isso._O_TEXT
Abre um arquivo no modo de texto (convertido). (Para obter mais informações, consulte E/S de Texto e Arquivo de Modo Binário e fopen.)_O_TRUNC
Abre um arquivo e o trunca para que ele fique com tamanho zero; o arquivo deve ter permissão de gravação. Não pode ser especificado com _O_RDONLY. A constante _O_TRUNC, usada com a constante _O_CREAT, abre um arquivo existente ou cria um.Dica
O sinalizador _O_TRUNC destrói o conteúdo do arquivo especificado.
_O_WRONLY
Abre o arquivo somente gravação. Não pode ser especificado com _O_RDONLY ou _O_RDWR._O_U16TEXT
Abre o arquivo no modo Unicode UTF-16._O_U8TEXT
Abre o arquivo no modo Unicode UTF-8._O_WTEXT
Abre o arquivo no modo Unicode.
Para especificar o modo de acesso ao arquivo, você deve especificar _O_RDONLY, _O_RDWR ou _O_WRONLY. Não há um valor padrão para o modo de acesso.
Se a constante _O_WTEXT for usada para abrir um arquivo para leitura, a função _open lê o início do arquivo e verifica se há uma BOM (marca de ordem de byte). Quando há BOM, o arquivo é tratado como UTF-8 ou UTF-16LE, de acordo com a BOM identificada. Quando não há BOM, o arquivo é tratado como ANSI. Quando o arquivo é aberto com a constante _O_WTEXT para gravação, o formato UTF-16 é usado. Independente da configuração ou da marca de ordem de byte anterior, se a constante _O_U8TEXT for usada, o arquivo sempre será aberto como UTF-8; se a constante _O_U16TEXT for usada, o arquivo sempre será aberto como UTF-16.
Quando o arquivo é aberto no modo Unicode com a constante _O_WTEXT, _O_U8TEXT ou _O_U16TEXT, as funções de entrada convertem os dados do arquivo em dados UTF-16 armazenados como tipo wchar_t. Funções que gravam em arquivos abertos no modo Unicode esperam buffers que contenham dados UTF-16 armazenados como tipo wchar_t. Se o arquivo estiver codificado como UTF-8, os dados em UTF-16 serão convertidos em UTF-8 no momento da gravação. O conteúdo do arquivo codificado como UTF-8 será convertido em UTF-16 no momento da leitura. Tentar ler ou gravar uma quantidade ímpar de bytes no modo Unicode gera um erro de validação de parâmetro. Para ler ou gravar dados armazenados em seu programa como UTF-8, use um modo de arquivo de texto ou binário em vez do modo Unicode. Você é responsável por toda a conversão de codificação necessária.
Se _open for chamado com _O_WRONLY|_O_APPEND (modo de acréscimo) e _O_WTEXT, _O_U16TEXT ou _O_U8TEXT, ela tentará abrir o arquivo para leitura e gravação, lerá a BOM e reabrirá o arquivo somente gravação. Se uma falha impedir de abrir o arquivo para leitura e gravação, ele será aberto somente para gravação e usará o valor padrão na configuração do modo Unicode.
Quando duas ou mais constantes de manifesto são usados para formar o oflag argumento, as constantes são combinadas com o operador OR bit a bit ( | ). Para saber mais sobre os modos de texto e binário, consulte E/S do arquivo nos modos de texto e binário.
O argumento pmode só é necessário quando _O_CREAT é especificada. Se o arquivo já existir, o argumento pmode será ignorado. Caso contrário, o argumento pmode especificará as configurações de permissões do arquivo, que são definidas quando o novo arquivo é fechado pela primeira vez. A função _open aplica a máscara de permissão do arquivo ao argumento pmode antes da definição das permissões. (Para saber mais, consulte _umask.) O argumento pmode é uma expressão inteira que contém uma ou mais constantes manifestas a seguir, definidas em <sys\stat.h>.
_S_IREAD
Somente a leitura é permitida._S_IWRITE
Gravação permitida. (Na verdade, permite leitura e gravação.)_S_IREAD | _S_IWRITE
Leitura e gravação permitidas.
Quando as duas constantes são fornecidas, elas são combinadas com o operador OR bit a bit ( | ). Todos os arquivos podem ser lidos no Windows; não há permissão somente gravação. Portanto, os modos _S_IWRITE e _S_IREAD | _S_IWRITE são equivalentes.
Se um valor diferente de uma combinação de _S_IREAD e _S_IWRITE é especificado para pmode— mesmo que ele especifique um válido pmode em outro sistema operacional — ou se qualquer valor diferente de ao permitido oflag valores for especificado, a função gera uma asserção no modo de depuração e invoca o manipulador de parâmetro inválido, como descrito em Validação do parâmetro. Se a execução puder continuar, a função retornará um valor -1 e definirá errno como EINVAL.
Requisitos
Rotina |
Cabeçalho necessá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 de compatibilidade, consulte Compatibilidade.
Bibliotecas
Todas as versões de bibliotecas de tempo de execução 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 );
}
}
Saída
Open succeeded on input file
Open succeeded on output file