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 fluxo com compartilhamento de arquivos.
Sintaxe
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parâmetros
filename
Nome do ficheiro a abrir.
mode
Tipo de acesso permitido.
shflag
Tipo de partilha permitida.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o fluxo. Um valor de ponteiro nulo indica um erro. Se filename for ou mode for NULL uma cadeia de caracteres vazia, essas funções invocarão o manipulador de parâmetros inválido, conforme descrito em Validação de parâmetros. Se a execução for permitida para continuar, essas funções retornarão NULL e definirão errno como EINVAL.
Para obter mais informações sobre esses e outros códigos de erro, consulte errno, _doserrno, _sys_errliste _sys_nerr.
Observações
A _fsopen função abre o arquivo especificado por filename como um fluxo e prepara o arquivo para leitura ou gravação compartilhada subsequente, conforme definido pelo modo e shflag argumentos.
_wfsopené uma versão de caracteres largos de ; os _fsopen e argumentos para filename são cadeias de mode_wfsopen caracteres largos.
_wfsopen e _fsopen comportar-se de forma idêntica de outra forma.
A cadeia de caracteres mode especifica o tipo de acesso solicitado para o arquivo, conforme mostrado na tabela a seguir.
| Período | Definição |
|---|---|
"r" |
Abre para leitura. Se o arquivo não existir ou não puder ser encontrado, a chamada _fsopen falhará. |
"w" |
Abre um arquivo vazio para gravação. Se o ficheiro fornecido existir, o seu conteúdo é destruído. |
"a" |
Abre para escrita no final do ficheiro (anexar); Cria o arquivo primeiro se ele não existir. |
"r+" |
Abre tanto para leitura como para escrita. (O arquivo deve existir.) |
"w+" |
Abre um arquivo vazio para leitura e gravação. Se o ficheiro fornecido existir, o seu conteúdo é destruído. |
"a+" |
Abre para leitura e anexo; Cria o arquivo primeiro se ele não existir. |
Use os tipos "w" e "w+" com cuidado, pois eles podem destruir arquivos existentes.
Quando um arquivo é aberto com o tipo de acesso "a" ou "a+", todas as operações de gravação ocorrem no final do arquivo. O ponteiro do arquivo pode ser reposicionado usando fseek ou rewind, mas sempre é movido de volta para o final do arquivo antes de qualquer operação de gravação ser executada. Assim, os dados existentes não podem ser substituídos. Quando o tipo de acesso "r+", "w+"" ou "a+" é especificado, tanto a leitura quanto a gravação são permitidas (diz-se que o arquivo está aberto para atualização). No entanto, ao alternar entre a leitura e a escrita, deve haver uma intervenção fsetpos, fseekou rewind operação. A posição atual pode ser especificada para a fsetpos operação ou fseek , se desejado. Além dos valores acima, um dos seguintes caracteres pode ser incluído para mode especificar o modo de tradução para novas linhas e para gerenciamento de arquivos.
| Período | Definição |
|---|---|
t |
Abre um ficheiro no modo de texto (traduzido). Neste modo, as combinações de alimentação de linha de retorno de carro (CR-LF) são traduzidas em alimentações de linha única (LF) na entrada e os caracteres LF são traduzidos para combinações de CR-LF na saída. Além disso, CTRL+Z é interpretado como um caractere de fim de arquivo na entrada. Em arquivos abertos para leitura ou leitura/gravação, _fsopen verifica se há uma CTRL+Z no final do arquivo e o remove, se possível. Ele é removido porque usar fseek e ftell mover dentro de um arquivo que termina com uma CTRL+Z pode fazer com fseek que se comporte incorretamente perto do final do arquivo. |
b |
Abre um ficheiro no modo binário (não traduzido); as traduções acima são suprimidas. |
D |
Especifica um arquivo temporário que é excluído quando o último ponteiro de arquivo para ele é fechado. |
R |
Especifica que o cache é otimizado para, mas não restrito a, acesso aleatório do disco. |
S |
Especifica que o cache é otimizado para, mas não restrito a, acesso sequencial do disco. |
T |
Especifica um arquivo que não é gravado no disco, a menos que a pressão da memória o exija. |
Se t ou b não for fornecido no mode, o modo de tradução é definido pela variável _fmodede modo padrão . Se t ou b estiver prefixado ao argumento, a função falhará e retornará NULL. Para uma discussão sobre texto e modos binários, consulte E/S de arquivo de texto e modo binário.
Relativamente à T e D:
-
Tevita gravar o arquivo no disco, desde que a pressão da memória não exija. Para obter mais informações, consulteFILE_ATTRIBUTE_TEMPORARYem constantes de atributo Filee também esta postagem de blog É apenas temporário. -
Despecifica um arquivo regular que é gravado no disco. A diferença é que ele é excluído automaticamente quando é fechado. Você pode combinarTDpara obter ambas as semânticas.
_fsopen e _wfsopen são variantes específicas da Microsoft do fopen. Eles não fazem parte do padrão ANSI. Para uma função mais portátil e segura, se você não precisar de compartilhamento de arquivos, considere _wfopen_s ou fopen_s.
O argumento shflag é uma expressão constante que consiste em uma das seguintes constantes manifestas, definidas em Share.h.
| Período | Definição |
|---|---|
_SH_DENYNO |
Permite acesso de leitura e gravação. |
_SH_DENYRD |
Nega acesso de leitura ao arquivo. |
_SH_DENYRW |
Nega acesso de leitura e gravação ao arquivo. |
_SH_DENYWR |
Nega acesso de gravação ao arquivo. |
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.
Mapeamentos de rotina de texto genérico
Tchar.h rotina |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
|---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Requerimentos
| Função | Cabeçalho obrigatório | Cabeçalhos opcionais |
|---|---|---|
_fsopen |
<stdio.h> |
<share.h>Para constante de manifesto para shflag parâmetro. |
_wfsopen |
<stdio.h> ou <wchar.h> |
<share.h>Para constante de manifesto para shflag parâmetro. |
Exemplo
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
No one else in the network can write to this file until we are done.
Ver também
de E/S de fluxo
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen