FILE *fopen(const char *nomeArquivo, const char *modoDeAbertura)
Recebe: um array de caracteres contendo o nome do arquivo e outro com o modo de abertura.
Retorna: o endereço de uma estrutura do tipo FILE usada pelo sistema para gerenciar o arquivo aberto. Em caso de falha na abertura, o valor NULL é retornado.
A função solicita ao sistema operacional o acesso a um determinado arquivo, usando os seguintes modos:
- r: abertura com permissão exclusiva para leitura, com posição corrente ajustada para o início do arquivo;
- r+: abertura com permissão para leitura e escrita, com posição corrente ajustada para o início do arquivo;
- w: truncamento do arquivo para tamanho zero ou criação de um arquivo novo com permissão exclusiva para escrita e posição corrente ajustada para o início do arquivo;
- w+: truncamento do arquivo para tamanho zero ou criação de um arquivo novo com permissão para escrita e leitura, com posição corrente ajustada para o início do arquivo;
- a: abertura com permissão exclusiva para escrita, com ajuste da posição corrente para o final do arquivo; se o arquivo não existir ele é criado;
- a: abertura com permissão para leitura e escrita, com ajuste da posição corrente para o final do arquivo; se o arquivo não existir ele é criado.
O modo pode conter também o caractere ‘b’, usado para compatibilidade com o padrão C89. Ele é ignorado em sistemas POSIX. Este caractere é usado para indicar que o arquivo é aberto no modo binário.
//EXEMPLO FOPEN()
#include <stdio.h>
int main(void)
{
char *nomeArquivo = "exemplo.dat";
FILE *arquivo = fopen(nomeArquivo, "w");
if(arquivo == NULL)
printf(“Falha\n”);
else
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>ls
exemplo.dat main main.c
int fclose(FILE *arquivo)
Recebe: uma variável contendo o endereço de um descritor de arquivo.
Retorna: um valor do tipo int indicando se a operação foi bem sucedida, retornando 0 no caso de sucesso, ou EOF em caso de falha.
A função dispara as ações para o fechamento do arquivo, o que inclui qualquer escrita de dados ainda pendente, e libera o recurso usado no sistema operacional. O comportamento da função é indefinido caso o endereço passado não corresponda a um descritor de arquivo aberto ou válido. Em caso de falha, o valor de errno é usado para indicar o erro.
//EXEMPLO FCLOSE()
#include <stdio.h>
int main(void)
{
char *nomeArquivo = "exemplo.dat";
FILE *arquivo = fopen(nomeArquivo, "w");
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>ls
exemplo.dat main main.c
size_t fread(void *itemLer, size_t tamanhoDoItem, size_t quantidadeItem, FILE *arquivo)
Recebe: o endereço do local onde se irá armazenar o que for lido do arquivo, o tamanho, em bytes, de um item individual que será lido, a quantidade de itens que serão lidos e o arquivo endereço do descritor de arquivo.
Retorna: a quantidade de itens lidos na chamada da função.
A função tenta transferir quantidadeItem itens, cada um com tamanhoDoItem bytes para a memória iniciada no endereço itemLer. O valor retornado é a quantidade de itens lidos com sucesso, que pode ser inferior à solicitada.
Não é feito um tratamento de erros, de forma que as funções feof e ferror podem ser utilizadas para verificar a razão de eventuais falhas.
//EXEMPLO FREAD()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "r");
char copia[99];
int itens_lidos = fread(copia, sizeof(char), 99, arquivo);
printf("Foram lidos %d itens\n", itens_lidos);
for(int i = 0; i < itens_lidos; i++)
printf("%c", copia[i]);
printf("\n");
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
Foram lidos 14 itens
Hello, World!
size_t fwrite(void *itemEscrita, size_t tamanhoDoItem,
size_t quantidadeItem, FILE *arquivo)
Recebe: a variável contendo o que será escrito no arquivo, o tamanho, em bytes do que será escrito, a quantidade de vezes que será escrito o item indicado, o arquivo no qual o objeto será escrito.
Retorna: a quantidade de itens escritos na chamada da função.
//EXEMPLO FWRITE()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "w");
char copia[99] = "Hello, World.\n\0";
fwrite(copia, 99*sizeof(char), 1, arquivo);
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>cat exemplo.dat
Hello, World.
int fseek(FILE *arquivo, long salto, int origemDoSalto)
Recebe: uma variável contendo um arquivo aberto, e a quantidade de posições que se deseja deslocar no arquivo.
Retorna: um inteiro diferente de zero caso tenha ocorrido algum erro na execução da função.
//EXEMPLO FSEEK()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "r");
char copia[99];
fseek(arquivo, 0, SEEK_SET);
fread(copia, 99*sizeof(char), 1, arquivo);
printf("%s\n", copia);
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
Hello, World.
long int ftell(FILE *arquivo)
Recebe: o arquivo do qual deseja-se saber em que posição ele está.
Retorna: o posicionamento para leitura e/ou escrita na qual o arquivo está no momento da chamada da função.
//EXEMPLO FTELL()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "r");
printf("%ld\n", ftell(arquivo));
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
0
void rewind(FILE *arquivo)
Recebe: o arquivo para o qual deseja-se fazer o reposicionamento para o início.
Retorna: a função não tem retorno; void.
//EXEMPLO REWIND()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "w+");
char copia[99] = "Hello, World.";
fwrite(copia, 99*sizeof(char), 1, arquivo);
fwrite("Teste.", 8*sizeof(char), 1, arquivo);
rewind(arquivo);
char teste[99];
fread(teste, 99*sizeof(char), 1, arquivo);
printf("%s\n", teste);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
Hello, World.
>ls
exemplo.dat main main.c
int fflush(FILE *stream)
Recebe: o arquivo para o qual deseja-se limpar o buffer de operações de leitura e escrita.
Retorna: um valor do tipo int indicando se a operação foi bem sucedida, retornando 0, ou não, retornando o valor numérico para EOF.
//EXEMPLO FFLUSH()
#include <stdio.h>
int main(void)
{
char *nomeArquivo = "exemplo.dat";
FILE *arquivo = fopen(nomeArquivo, "w");
char textoQualquer[99] = "Teste do teste de testes.\n";
fwrite(textoQualquer, 99*sizeof(char), 1, arquivo);
fflush(arquivo);
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>ls
exemplo.dat main main.c
>cat exemplo.dat
Teste do teste de testes.
int fprintf(FILE *stream, const char *stringParaEscrita,
(variáveis serão utilizadas, assim como em printf))
Recebe: o arquivo no qual deseja-se efetuar a escrita da string, a string a ser escrita, as variáveis referentes a formatação da string.
Retorna: o número de caracteres escrito, ou, caso a operação não seja bem sucedida, um valor negativo.
//EXEMPLO FPRINTF()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "w");
fprintf(arquivo, "%d é a resposta.\n", 42);
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>ls
exemplo.dat main main.c
>cat exemplo.dat
42 é a resposta.
int fscanf(FILE *stream, const char *stringParaEscrita,
(variáveis que serão utilizadas na formatação))
Recebe: o arquivo a partir do qual deseja-se copiar o conteúdo para uma string, a string para a qual o conteúdo será escrito.
Retorna: EOF, caso tenha atingido o fim do arquivo, ou então retorna a quantidade de leituras realizadas.
//EXEMPLO FSCANF()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "w+");
char fraseQualquer[99];
fprintf(arquivo, "Este não é um teste.\n");
fprintf(arquivo, "Este é O Teste.\n");
rewind(arquivo);
while (fscanf(arquivo, "%s", fraseQualquer) != EOF)
printf("%s ", fraseQualquer);
putchar('\n');
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
>ls
exemplo.dat main main.c
>cat exemplo.dat
Este não é um teste.
Este é O Teste.
int feof(FILE *arquivo)
Recebe: o arquivo para o qual deseja-se saber se o seu final foi alcançado.
Retorna: um inteiro diferente de zero caso o programa tenha chegado ao fim do arquivo.
//EXEMPLO FEOF()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "r");
printf("%d\n", feof(arquivo));
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
0
int remove(const char *nomeArquivo)
Recebe:uma string contendo o nome do arquivo que se deseja remover.
Retorna:um valor do tipo int indicando se a operação foi bem sucedida, retornando 0, ou não, retornando um inteiro diferente de 0.
//EXEMPLO REMOVE()
#include <stdio.h>
int main(void)
{
remove("exemplo2.dat");
return 0;
}
>clang-7 -pthread -lm -o main main.c
>ls
exemplo2.dat main main.c
>./main
>ls
main main.c
int rename(const char *nomeArquivo, const char *renomearArquivo)
Recebe: uma string com o nome do arquivo que será renomeado, uma string contendo o novo nome do arquivo.
Retorna: um valor do tipo int indicando se a operação foi bem sucedida, retornando 0, ou não, retornando um inteiro diferente de 0.
//EXEMPLO RENAME()
#include <stdio.h>
int main(void)
{
rename("exemplo.dat", "exemplo2.dat");
return 0;
}
>clang-7 -pthread -lm -o main main.c
>ls
exemplo.dat main main.c
>./main
>ls
exemplo2.dat main main.c
int printf(const char *stringParaEscrita,
(variáveis que serão utilizadas na formatação))
Recebe: a string que será impressa na saída padrão, as variáveis indicadas na string para devida formatação.
Retorna: o número de caracteres escritos, ou, caso a operação não tenha sido bem sucedida, um valor negativo.
//EXEMPLO printf()
#include <stdio.h>
int main(void)
{
printf("%d é a resposta.\n", 42);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
42 é a resposta.
int scanf(const char *stringDeLeitura,
(variáveis que receberão os valores indicados na entrada padrão))
Recebe: string indicando quais os tipos das variáveis que receberão os valores indicados na entrada padrão, as variáveis que tiveram seus tipos indicadas na string.
Retorna: EOF, caso tenha atingido o fim do arquivo, ou então retorna a quantidade de leituras realizadas.
//EXEMPLO SCANF()
#include <stdio.h>
int main(void)
{
int numeros[7];
for (int i = 0; i < 7; i++)
scanf("%d", numeros + i);
putchar('{');
for (int i = 0; i < 7; i++)
printf("%d, ", numeros[i]);
printf("...}\n");
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
1
2
3
4
5
6
7
{1, 2, 3, 4, 5, 6, 7, ...}
int getc(FILE *stream)
Recebe: a stream a partir da qual o próximo caractere será lido.
Retorna: o próximo caractere presente na stream indicada.
//EXEMPLO GETC()
#include <stdio.h>
int main(void)
{
FILE *arquivo = fopen("exemplo.dat", "w+");
fprintf(arquivo, "%d é a resposta.\n", 42);
rewind(arquivo);
char c;
while ((c = getc(arquivo)) != EOF)
putchar(c);
fclose(arquivo);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
42 é a resposta.
char *gets(FILE *stream)
Recebe: a stream a partir da qual a próxima linha contendo uma string será lida.
Retorna: a string lida na chamada da função ou NULL, em caso de erro.
//EXEMPLO GETS()
#include <stdio.h>
int main(void)
{
char texto[99];
gets(texto);
printf("%s\n", texto);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
O teste dos testes de casos teste.
O teste dos testes de casos teste.
int getchar()
Recebe: não recebe parâmetros; void.
Retorna: o próximo caractere presente na entrada padrão.
//EXEMPLO GETCHAR()
#include <stdio.h>
int main(void)
{
char c, frase[99];
int i = 0;
while ((c = getchar()) != EOF)
frase[i++] = c;
printf("%s", frase);
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
O teste do teste de todos os testes
Fim.
O teste do teste de todos os testes
Fim.
int putchar(int caractere)
Recebe: um caractere.
Retorna: o caractere escrito na saída padrão.
//EXEMPLO PUTCHAR()
#include <stdio.h>
int main(void)
{
putchar(';');
putchar('\n');
return 0;
}
>clang-7 -pthread -lm -o main main.c
>./main
;