_sopen_s, _wsopen_s
Abre um arquivo para o compartilhamento.Estas são as versões do _sopen e _wsopen com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
errno_t _sopen_s(
int* pfh,
const char *filename,
int oflag,
int shflag,
int pmode
);
errno_t _wsopen_s(
int* pfh,
const wchar_t *filename,
int oflag,
int shflag,
int pmode,
);
Parâmetros
[out]pfh
O identificador de arquivo, ou -1, no caso de um erro.[in]filename
Nome do arquivo.[in]oflag
Tipo de operações permitidas.[in]shflag
Tipo de compartilhamento permitido.[in]pmode
Configuração de permissão.
Valor de retorno
Um valor de retorno diferente de zero indica um erro, caso em que errno é definida para um dos seguintes valores.
EACCES
Caminho especificado é um diretório, ou arquivo é somente leitura, mas foi tentada uma operação de abrir-para-gravação.EEXIST
_O_CREAT e _O_EXCL sinalizadores forem especificados, mas filename já existe.EINVAL
Invalid oflag, shflag, orpmode argument, or pfh or filename was a null pointer.EMFILE
Não há mais descritores de arquivo disponíveis.ENOENT
Arquivo ou caminho não encontrado.
Se um argumento inválido for passado para a função, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, errno for definido como EINVAL e EINVAL é retornado.
Para obter mais informações sobre esses e outros códigos de retorno, consulte _doserrno, errno, _sys_errlist e _sys_nerr.
No caso de um erro, -1 será retornado por meio de pfh (a menos que pfh é um ponteiro nulo).
Comentários
O _sopen_s função abre o arquivo especificado por filename e prepara o arquivo compartilhado de leitura ou gravação, conforme definido pela oflag e shflag._wsopen_sé uma versão de caractere largo de _sopen_s; o filename argumento para _wsopen_s é uma seqüência de caracteres largos._wsopen_se _sopen_s tenham comportamento idêntico caso contrário.
Mapeamentos de rotina de texto genérico
Rotina de TCHAR.h |
_ Unicode e _ MBCS do arquivo não definido |
_ MBCS do arquivo definido |
_ Unicode definido |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
A expressão de inteiro oflag é formado pela combinação de uma ou mais constantes manifesto, definidas no arquivo Fcntl.h.Quando dois ou mais constantes formam o argumento oflag, eles são combinados com o (operador bit a bit ou | ).
_O_APPEND
Reposiciona um ponteiro de arquivo para o final do arquivo antes de cada operação de gravação._O_BINARY
Abre um arquivo no modo binário de (não traduzido).(Consulte fopen para obter uma descrição do modo binário.)_O_CREAT
Cria e abre um novo arquivo para gravação.Não terá efeito se o arquivo especificado pelo filename existe._O_CREAT| _O_SHORT_LIVED
Criar um arquivo como temporário e, se possível não liberou para o disco._O_CREAT| _O_TEMPORARY
Criar um arquivo como temporário. o arquivo é excluído quando o último descritor de arquivo é fechado._O_CREAT| _O_EXCL
Retorna um valor de erro se o arquivo especificado pelo filename existe.Aplica-se somente quando usado com _O_CREAT._O_NOINHERIT
Impede a criação de um descritor de arquivo compartilhado._O_RANDOM
Especifica principalmente acesso aleatório do disco._O_RDONLY
Abre um arquivo para leitura. não pode ser especificado com _O_RDWR ou _O_WRONLY._O_RDWR
Abre um arquivo para leitura e escrita; não pode ser especificado com _O_RDONLY ou _O_WRONLY._O_SEQUENTIAL
Especifica principalmente acesso seqüencial do disco._O_TEXT
Abre um arquivo em modo de texto (traduzido).(Para obter mais informações, consulte texto e binário e/S de arquivos de modo e fopen.)_O_TRUNC
Abre um arquivo e trunca como zero comprimento; o arquivo deve ter permissão de gravação.Você não pode especificar esse sinalizador com _O_RDONLY._O_TRUNC usado com _O_CREAT abre um arquivo existente ou cria um novo arquivo.Observação O _O_TRUNC sinalizador destrói o conteúdo do arquivo especificado.
_O_WRONLY
Abre um arquivo para gravar apenas; não pode ser especificado com _O_RDONLY ou _O_RDWR._O_U16TEXT
Abra o arquivo no modo Unicode UTF-16._O_U8TEXT
Abra o arquivo no modo Unicode UTF-8._O_WTEXT
Abra o arquivo no modo Unicode.
Para especificar o modo de acesso de arquivo, você deve especificar um _O_RDONLY, _O_RDWR, ou _O_WRONLY.Não há nenhum valor padrão para o modo de acesso.
Se _sopen_s é chamado com _O_WRONLY|_O_APPEND (modo de acréscimo) e _O_WTEXT, _O_U16TEXT, ou _O_U8TEXT, ele irá tentar abrir o arquivo para leitura e gravação, primeiro leia a BOM e depois reabri-la somente para gravação.Se abrir o arquivo para leitura e gravação falhar, ele irá abri-lo somente para gravação e usar o valor padrão para a configuração do modo Unicode.
O argumento shflag é uma expressão de constante que consiste em uma das seguintes constantes manifesto, definidas em Share.h.
_SH_DENYRW
Nega o acesso de leitura e gravação para um arquivo._SH_DENYWR
Nega o acesso de gravação para um arquivo._SH_DENYRD
Nega o acesso de leitura para um arquivo._SH_DENYNO
Permissões de leitura e gravação acesso.
O pmode argumento é sempre necessário, ao contrário em _sopen.Quando você especifica _O_CREAT, se o arquivo não existir, pmode Especifica as configurações de permissão do arquivo, que são definidas quando o novo arquivo for fechado na primeira vez.Caso contrário, pmode será ignorado.pmodeé uma expressão de inteiros que contém uma ou ambas as constantes de manifesto _S_IWRITE e _S_IREAD, definido em SYS\Stat.h.Quando as duas constantes forem fornecidas, eles são combinados com o operador bit a bit ou.O significado de pmode é o seguinte.
_S_IWRITE
Permissão de escrita._S_IREAD
Permissão de leitura._S_IREAD | _S_IWRITE
Permissão de leitura e gravação.
Se a permissão de gravação não for fornecido, o arquivo é somente leitura.Sob o sistema operacional Windows, todos os arquivos estão legíveis; não é possível conceder a permissão somente para gravação.Assim, os modos de _S_IWRITE e _S_IREAD | _S_IWRITE são equivalentes.
_sopen_saplica-se a máscara de permissão de arquivo atual para pmode antes de definir as permissões (consulte _umask).
Requisitos
Rotina |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h>, <sys/types.h>, <sys/stat.h>, <share.h> |
_wsopen_s |
<io.h> ou <wchar.h> |
<fcntl.h>, <sys/types.h>, <sys/stat.h>, <share.h> |
Para obter mais informações de compatibilidade, consulte compatibilidade na introdução.
Exemplo
Consulte o exemplo para _locking.