NOME¶
fopen, fdopen, freopen - funções de abertura de fluxo
SINOPSE¶
#include <stdio.h>
FILE *fopen (const char *path, const char
*mode);
FILE *fdopen (int fildes, const char *mode);
FILE *freopen (const char *path, const char
*mode, FILE *stream);
DESCRIÇÃO¶
A função
fopen abre o arquivo cujo nome é a string
apontada por
path e associa um fluxo com ele.
O argumento
mode aponta para uma string que começa com uma ou mais
sequências (Caracteres adicionais podem seguir essas sequências.):
- r
- Abre arquivo de texto para leitura. O fluxo é
posicionado no começo do arquivo.
- r+
- Abre para leitura e escrita. O fluxo é posicionado no
começo do arquivo.
- w
- Trunca o arquivo para comprimento zero, ou cria arquivo de
texto para escrita. O fluxo é posicionado no começo do
arquivo.
- w+
- Abre para leitura e escrita. O arquivo é criado se
não existir, caso contrário ele é truncado. O fluxo é
posicionado no começo do arquivo.
- a
- Abre para escrita. O arquivo é criado se não
existir. O fluxo é posicionado no fim do arquivo.
- a+
- Abre para leitura e escrita. O arquivo é criado se
não existir. O fluxo é posicionado no fim do arquivo.
A string de
mode também pode incluir a letra ``b'' como um
último caractere ou como um caractere entre os caracteres em qualquer uma
das strings de dois caracteres descritas acima. Isto é estritamente para
compatibilidade com ANSI X3.159-1989 (``ANSI C'') e não tem efeito; o
``b'' é ignorado em todos os sistemas conformes com POSIX, incluindo o
Linux. (Outros sistemas podem tratar arquivos de texto e arquivos
binários de formas diferentes, e o acréscimo de ``b'' pode ser uma
boa idéia se você faz E/S para um arquivo binário e espera que
seu programa possa ser portado para ambientes não-Unix.)
Quaisquer arquivos criados terão o modo
S_IRUSR|
S_IWUSR|
S_IRGRP|
S_IWGRP|
S_IROTH|
S_IWOTH
(0666), conforme modificado pelo valor de 'umask' do processo (veja
umask(2).
Leitura e escrita pode ser mescladas em fluxos de leitura/escrita em qualquer
ordem. Note que o C ANSI requer que uma função de posicionamento de
arquivo intercale-se entre a saída e a entrada, a menos que uma
operação de entrada encontre o fim do arquivo. (Se esta
condição não é encontrada, então uma leitura é
permitida para retornar o resultado de escritas que não sejam a mais
recente.) Portanto é uma boa prática (e de fato necessário sob
o Linux, às vezes) colocar uma operação
fseek ou
fgetpos entre operações de escrita e leitura em tais fluxos.
Esta operação pode ser um aparente no-op ("no operation"),
como em
fseek(..., 0L, SEEK_CUR) chamado para seu efeito colateral de
sincronismo.
A função
fdopen associa um fluxo com o descritor de arquivos
existente,
fildes. O
modo do fluxo (um dos valores
"r", "r+", "w", "w+", "a",
"a+") precisa ser compatível com o modo do descritor de
arquivo. O indicador de posição do arquivo do novo fluxo é
setado para aquele pertencente ao
fildes, e os indicadores de erro e
fim de arquivo são limpos. Os modos "w" ou "w+"
não provocam truncamento do arquivo. O descritor de arquivo não
sofre um 'dup', e será fechado quando o fluxo criado por
fdopen
for fechado. O resultado da aplicação de
fdopen para um
objeto de memória compartilhado é indefinido.
A função
freopen abre o arquivo cujo nome é a string
apontada por
path e associa o fluxo apontado por
stream a ele. O
fluxo original (se existir) é encerrado. O argumento
mode é
usado apenas como na função
fopen. O uso primário da
função
freopen é mudar o arquivo associado com o fluxo
de texto padrão
(
stderr,
stdin, ou
stdout).
VALORES DE RETORNO¶
Em caso de término bem-sucedido,
fopen,
fdopen e
freopen retornam um ponteiro para
FILE. Caso contrário,
é retornado um
NULL e a variável global
errno é
setada para indicar o erro.
ERROS¶
- EINVAL
- O mode fornecido para fopen, fdopen,
ou freopen era inválido.
As funções
fopen,
fdopen e
freopen também
podem falhar e setar
errno para quaisquer dos erros especificados para
a rotina
malloc(3).
A função
fopen também pode falhar e setar
errno
para quaisquer dos erros especificados para a rotina
open(2).
A função
fdopen também pode falhar e setar
errno
para quaisquer dos erros especificados para a rotina
fcntl(2).
A função
freopen também pode falhar e setar
errno
para quaisquer dos erros especificados para as rotinas
open(2),
fclose(3) e
fflush(3).
VEJA TAMBÉM¶
open(2),
fclose(3)
PADRÕES¶
As funções
fopen e
freopen estão em conformidade
com ANSI X3.159-1989 (``ANSI C''). A função
fdopen está
em conformidade com IEEE Std1003.1-1988 (``POSIX.1'').
TRADUÇÃO PARA A LÍNGUA PORTUGUESA¶
RUBENS DE JESUS NOGUEIRA <darkseid99@usa.net> (tradução) XXXXXX
XX XXXXX XXXXXXXX <xxxxxxxxxx@xxx.xxx> (revisão)