Compartilhar via


_sopen, _wsopen

Abre um arquivo para compartilhamento. Versões mais seguras dessas funções estão disponíveis: confira _sopen_s, _wsopen_s.

Sintaxe

int _sopen(
   const char *filename,
   int oflag,
   int shflag [,
   int pmode ]
);
int _wsopen(
   const wchar_t *filename,
   int oflag,
   int shflag [,
   int pmode ]
);

Parâmetros

filename
Nome do arquivo.

oflag
Os tipos de operações permitidas.

shflag
O tipo de compartilhamento permitido.

pmode
Configuração de permissão.

Valor retornado

Cada uma destas funções mostra um descritor de arquivo do arquivo aberto.

Se filename ou oflag for um ponteiro NULL ou se oflag ou shflag não estiver dentro de um intervalo válido de valores, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetros. Se a execução puder continuar, essas funções retornarão -1 e definirão errno como um dos valores a seguir.

errno valor Condição
EACCES O caminho determinado é um diretório ou o arquivo é somente leitura, mas foi realizada uma tentativa de operação de abertura para gravação.
EEXIST Sinalizadores _O_CREAT e _O_EXCL foram especificados, mas filename já existe.
EINVAL Argumento oflag ou shflag inválido.
EMFILE Nenhum outro descritor de arquivo disponível.
ENOENT Arquivo ou caminho não encontrado.

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

Comentários

A função _sopen abre o arquivo especificado por filename e prepara o arquivo para leitura ou gravação compartilhada, como definido por oflag e shflag. A função _wsopen é uma versão de caractere largo da função _sopen; o argumento filename para _wsopen é uma cadeia de caracteres larga. Caso contrário, _wsopen e _sopen se comportam de forma idêntica.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar isso, confira Estado global no CRT.

Mapeamentos de rotina de texto genérico

Rotina Tchar.h _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tsopen _sopen _sopen _wsopen

A expressão de inteiro oflag é formada combinando uma ou mais das constantes de manifesto a seguir, as quais são definidas em <fcntl.h>. Quando duas ou mais constantes formam o argumento oflag, elas são combinadas com o operador OR bit a bit (|).

Constante oflag Comportamento
_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). (Confira fopen para ver 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 libera para 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. Para preservar o comportamento herdado para a compatibilidade do aplicativo, outros processos não são impedidos de excluir esse arquivo.
_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 ANSI (traduzido). (Para saber mais, confira E/S de arquivo nos modos de texto e 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. Observação: o sinalizador _O_TRUNC destrói o conteúdo do arquivo especificado.
_O_WRONLY Abre um arquivo somente gravação. Não pode ser especificado 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_RDWR ou _O_WRONLY. Não há valor padrão para o modo de acesso.

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 codificado em UTF-8 do arquivo é convertido para UTF-16 quando ele é lido. 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 _sopen for chamado com _O_WRONLY | _O_APPEND (modo de acréscimo) e _O_WTEXT, _O_U16TEXT ou _O_U8TEXT, ele primeiro tentará abrir o arquivo para leitura e gravação, lerá a BOM e, em seguida, reabrirá o arquivo somente para 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.

O argumento shflag é uma expressão de constante composta por uma das seguintes constantes de manifesto, definidas em <share.h>.

Constante shflag Comportamento
_SH_DENYRW Nega acesso de leitura e gravação a um arquivo.
_SH_DENYWR Nega acesso de gravação a um arquivo.
_SH_DENYRD Nega acesso de leitura a um arquivo.
_SH_DENYNO Permite acesso de leitura e gravação.

O argumento pmode só é necessário quando _O_CREAT é especificada. Caso o arquivo não exista, pmode especifica as configurações de permissão do arquivo, que são definidas quando o novo arquivo é fechado pela primeira vez. Caso contrário, pmode é ignorado. pmode é uma expressão de inteiro que contém uma ou as duas constantes de manifesto _S_IWRITE e _S_IREAD, que são definidas em <sys\stat.h>. Quando ambas as constantes são fornecidas, elas são combinadas com o operador OR bit a bit. O significado de pmode é o seguinte.

pmode Significado
_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.

Se a permissão de gravação não for concedida, o arquivo será somente leitura. No sistema operacional Windows, todos os arquivos podem ser lidos, não sendo possível conceder permissão de somente gravação. Portanto, os modos _S_IWRITE e _S_IREAD | _S_IWRITE são equivalentes.

A função _sopen aplica a máscara de permissão do arquivo ao argumento pmode antes da definição das permissões. Para obter mais informações, consulte _umask.

Requisitos

Função Cabeçalho necessário Cabeçalho opcional
_sopen <io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>
_wsopen <io.h> ou <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

Confira o exemplo de _locking.

Confira também

E/S de baixo nível
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen