_fsopen, _wfsopen
Abre um fluxo com o compartilhamento de arquivos.
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 arquivo a ser aberta.mode
Tipo de acesso permitido.shflag
Tipo de compartilhar permitido.
Valor de retorno
Cada uma dessas funções retorna um ponteiro para o fluxo. Um valor nulo de ponteiro indica um erro. Se filename ou mode são NULL ou uma cadeia de caracteres vazia, essas funções invoca o manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, essas funções retornarão NULL e definirão errno para EINVAL.
Para obter mais informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist, and _sys_nerr.
Comentários
A função de _fsopen abre o arquivo especificado por filename como um fluxo e prepara o arquivo para leitura ou gravação compartilhada subsequente, conforme definido pelo modo os argumentos de shflag . _wfsopen é uma versão de ampla caractere de _fsopen; os argumentos de filename e de mode a _wfsopen são cadeias de caracteres de ampla caractere. Caso contrário, _wfsopen e _fsopen, ao contrário, se comportam de forma idêntica.
A cadeia de caracteres mode especifica o tipo de acesso solicitado para o arquivo, conforme mostrado na seguinte tabela.
Termo |
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 arquivo determinado existir, seu conteúdo será destruído. |
"a" |
Abre gravando no final do arquivo (adicionar); cria o arquivo primeiro se não existir. |
"r+" |
Abre para leitura e gravação. (O arquivo deve existir.) |
"w+" |
Abre um arquivo vazio para a leitura e gravação. Se o arquivo determinado existir, seu conteúdo será destruído. |
"a+" |
Abre ler e anexando; cria o arquivo primeiro se não existir. |
Use os tipos de "w" e de "w+" com cuidado, como podem ser destruído arquivos existentes.
Quando um arquivo é aberto com o tipo de acesso de "a" ou de "a+" , todas as operações de gravação ocorrem no final do arquivo. O ponteiro de arquivo pode ser reposicionado usando fseek ou rewind, mas sempre é movido de volta ao final do arquivo antes que qualquer operação de gravação foi executada. Portanto, os dados existentes não podem ser substituídos. Quando "r+", "w+", ou o tipo de acesso de "a+" forem especificados, a leitura e gravação são permitidas (o arquivo é aberto para atualizar). No entanto, ao alternar entre a leitura e a gravação, deve haver fsetposde intervenção, fseek, ou uma operação de rewind . A posição atual pode ser especificado para a operação de fsetpos ou de fseek , se desejado. Além dos valores acima, um dos seguintes caracteres pode ser incluído em mode para especificar o modo de conversão de linhas, e para o gerenciamento de arquivo.
Termo |
Definição |
---|---|
t |
Abre um arquivo no modo de texto traduzido (). Nesse modo, a retorno- linha combinações de retorno de carro (CR-LF) é convertida em uma alimentação de linha na entrada (LF) e os caracteres de LF são convertidos em combinações de CR-LF na saída. Além disso, CTRL+Z é interpretado como um caractere de participante de Arquivo na entrada. Em arquivos abertos leitura ou leitura/gravação, _fsopen verifica se há um CTRL+Z no final do arquivo e solte-o, se possível. Isso é feito como usar fseek e ftell para mover dentro de um arquivo que termina com um CTRL+Z pode fazer com que fseek se com comportamento de forma incorreta próximo do fim do arquivo. |
b |
Abre um arquivo no modo binário não traduzido (); as traduções acima são suprimida. |
S |
Especifica que armazenar em cache é otimizado para, mas não restrito ao acesso sequencial de disco. |
R |
Especifica que armazenar em cache é otimizado para, mas não restrito ao acesso aleatório de disco. |
T |
Especifica um arquivo como temporário. Se possível, não é transmitido ao disco. |
D |
Especifica um arquivo como temporário. É excluído quando o último ponteiro do arquivo é fechado. |
Se t ou b não são dados em mode, o modo de conversão é definido pela variável _fmodede modo padrão. Se t ou b for prefixado para o argumento, a função falhará e retornará NULL. Para obter uma descrição dos modos de texto e binários, consulte O modo de texto e binários de E/S.
O argumento shflag é uma expressão constante consiste das seguintes constantes manifestas, definido em Share.h.
Termo |
Definição |
---|---|
_SH_COMPAT |
Define o modo de compatibilidade para aplicativos de 16 bits. |
_SH_DENYNO |
Permite acesso de leitura e gravação. |
_SH_DENYRD |
Nega o acesso de leitura ao arquivo. |
_SH_DENYRW |
Nega o acesso de leitura e gravação no arquivo. |
_SH_DENYWR |
Nega o acesso de gravação no arquivo. |
Mapeamentos da rotina de texto genérico
Rotina Tchar.h |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Requisitos
Função |
Cabeçalho necessário |
Cabeçalhos opcionais |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> Para a constante manifesta para o parâmetro de shflag . |
_wfsopen |
<stdio.h> ou <wchar.h> |
<share.h> Para a constante manifesta para o parâmetro de shflag . |
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" );
}