Partilhar via


_sopen, _wsopen

Abre um arquivo para compartilhamento. Estão disponíveis versões mais seguras destas funções: ver _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
O tipo de operações permitidas.

shflag
O tipo de partilha permitido.

pmode
Configuração de permissão.

Valor de retorno

Cada uma dessas funções retorna um descritor de arquivo para o arquivo aberto.

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

errno valor Condição
EACCES O caminho fornecido é um diretório ou o arquivo é somente leitura, mas uma operação aberta para gravação foi tentada.
EEXIST _O_CREAT e _O_EXCL bandeiras foram especificadas, mas filename já existe.
EINVAL Inválido oflag ou shflag argumento.
EMFILE Não estão disponíveis mais descritores de ficheiros.
ENOENT O arquivo ou caminho não foi encontrado.

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

Observações

A _sopen função abre o arquivo especificado por filename e prepara o arquivo para leitura ou gravação compartilhada, conforme definido por oflag e shflag. _wsopené uma versão de caracteres largos de ; o filename argumento para _wsopen é uma cadeia de _sopencaracteres largos. _wsopen e _sopen comportar-se de forma idêntica de outra forma.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterá-lo, consulte estado global noCRT .

Mapeamentos de rotina de texto genérico

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

A expressão oflag inteira é formada pela combinação de uma ou mais das seguintes constantes de manifesto, que são definidas em <fcntl.h>. Quando duas ou mais constantes formam o argumento oflag, elas são combinadas com o operador bitwise-OR ( | ).

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.

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 _sopen 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.

O argumento shflag é uma expressão constante que consiste em uma das seguintes constantes manifestas, que são definidas em <share.h>.

shflag constante 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 pmode argumento é necessário apenas quando _O_CREAT é especificado. Se o arquivo não existir, 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 inteira que contém uma ou ambas as constantes _S_IWRITE de manifesto e _S_IREAD, que são definidas em <sys\stat.h>. Quando ambas as constantes são dadas, elas são combinadas com o operador bitwise-OR. O significado de pmode é o seguinte.

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.

Se a permissão de gravação não for dada, o arquivo será somente leitura. No sistema operacional Windows, todos os arquivos são legíveis; Não é possível dar permissão somente gravação. Portanto, os modos _S_IWRITE e _S_IREAD | _S_IWRITE são equivalentes.

_sopen 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.

Requerimentos

Função Cabeçalho obrigató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 mais informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

Veja o exemplo para _locking.

Ver também

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