Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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