Você está na página 1de 7

11/30/2009

Linguagem C - Entrada e Saida

Linguagem C - Entrada e Saida


ARQUIVOS EM DISCO Entrada e Sada Funes que realizam E/S em console E/S ANSI -- Stream/ Arquivo Open de Arquivos Escrevendo um Caracter Lendo um Caracter Encontrando fim de Arquivo Fechando um Arquivo Funo Erro e Rewind Exemplo de uso da funes de E/S Exemplo de cpia de arquivos - disco Funes getw() e putw() Funes fgets() e fputs() Funes fread() e fwrite() Funo fseek() Exemplo: Programa DUMP Contents

ARQUIVOS EM DISCO
Entrada e Sada
STREAMS so usados para ler e escrever em C. Um STREAM pode ser uma dispositivo padro do sistema ou um arquivo especfico. STREAM texto, quando o sistema operacional manipula os dados antes de entregar ao programa C STREAM binrio, no tem transformao pelo sistema operacional o que vem do Programa e vai para o arquivo igual. Existem uma associao do STREAM ao arquivo na hora do open. Nem todos os arquivos suportam todas as operaes. O Close desassocia o STREAM do arquivo e fora a transferncia da rea de buffer para o arquivo.

Funes que realizam E/S em console


Getchar() Getche() Getch()
www.goulart.pro.br/arquivos.html

L um caracter do teclado; aguarda um enter L um caracter com eco; no aguarda enter L um caracter sem eco; no aguarda enter
1/7

11/30/2009

Linguagem C - Entrada e Saida

Putchar() Gets() Puts() E/S Formatada Printf() Scanf()

Escreve um caracter na tela L um string do teclado Escreve um string para a tela

E/S ANSI -- Stream/ Arquivo


fopen() fclose putc() getc() fseek() fprintf() fscanf() feof() ferror() fread() fwrite rewind() remove() Abre um STREAM (arquivo) fecha um STREAM (arquivo) Escreve um caracter L um caracter Procura por um byte especfico Igual ao printf() do console. Igual ao scanf() do console Retorna verdadeiro se encontrou fim arquivo Retorna verdadeiro se ocorreu erro le um bloco de dados escreve um bloco de dados reposiciona o lacalizador no inicio do arquivo apaga um arquivo

No Open de arquivos, Valores legais para o modo: "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+" "r+b" "w+b" "a+b" "rt" "wt" "at" "r+t" "w+t" "a+t" abre um arquivo para leitura cria uma arquivo para escrita acrescenta dados a um arquivo j existente abre um arquivo binrio para leitura cria um arquivo binrio para escrita acrescenta dados a um arq binrio existente abre um arquivo para leitura/escrita cria um arquivo para leitura/escrita acrescenta dados/cria um arq para leit/escrita abre um arquivo binario para leitura/escrita cria um arquivo binrio para leitura/escrita acrescenta ou cria um arq bin para leit/escrita abre um arquivo texto para leitura cria um arquivo texto para leitura acrescenta dados a um arquivo texto abre um arquivo texto para leitura/escrita cria um arquivo texto para leitura/escrita acrescenta ou cria arq. texto para leit/escrita

Open de Arquivos
prottipo da funo: FILE *fopen(char *nome_de_arquivo, char *modo)
FILE *fp; if ((fp=fopen("teste", "w")) == NULL)
www.goulart.pro.br/arquivos.html 2/7

11/30/2009

Linguagem C - Entrada e Saida

{ puts("nao posso abrir o arquivo\n"); exit(1); }

Escrevendo um Caracter
prottipo da funo : int putc(int ch, FILE *fp);

Lendo um Caracter
prottipo da funo : int getc(FILE *fp);
ch = getc(fp); while (ch!=EOF) { ch = getc(fp); }

Encontrando fim de Arquivo


Determina fim de arquivos para leitura binria (em especial). prottipo da funo: int feof(FILE *fp);
while (!feof(fp)) ch = getc(fp);

Fechando um Arquivo
prottipo da funo: int fclose(FILE *fp);

Funo Erro e Rewind


prottipo da funo: int ferror(FILE *fp); void rewinf(FILE *fp);

Exemplo de uso da funes de E/S


/* Ktod - cria arquivo em disco.. #include <stdio.h>
www.goulart.pro.br/arquivos.html

*/
3/7

11/30/2009

Linguagem C - Entrada e Saida

#include <stdlib.h> main (int argc, char *argv[]) { FILE *fp; char ch; if (argc !=2) { printf ("Falta nome do arquivo \n"); exit (1); } if ((fp=fopen (argv[1], "w")) == NULL) { printf ("o arquivo naopode ser aberto\n"); exit (1); } do { ch = getchar (); if (EOF == putc(ch,fp)) { printf("Erro no arquivo durante gravacao"); break; } } while (ch!= '$'); fclose (fp); return 0; }

Exemplo de cpia de arquivos - disco


/* Copia de um arquivo */ /* COPYARQ copia arquivo em disco.. */ #include <stdio.h> #include <stdlib.h> main (int argc, char *argv[]) { FILE *entr, *saida; char ch; if (argc !=3) { printf ("Falta nome do arquivo \n"); exit (1); } if ((entr=fopen (argv[1], "rb")) == NULL) { printf ("o arquivo entrada nao pode ser aberto\n"); exit (1); } if ((saida=fopen (argv[2], "wb")) == NULL) { printf ("o arquivo saida nao pode ser aberto\n"); exit (1); } /* copiando o arquivo */ while(!feof(entr)) { ch = getc (entr); if(ferror(entr)) { printf("erro lendo o arquivo");f
www.goulart.pro.br/arquivos.html 4/7

11/30/2009

Linguagem C - Entrada e Saida

break; } putc (ch, saida); if(ferror(saida)) { printf("erro na gravacao do arquivo"); break; } } fclose (entr); fclose (saida); return 0; }

Funes getw() e putw()


So funes no padro ANSI usadas para ler e escrever inteiros de e para arquivos em disco. prottipos: int putw(int i, FILE *fp); int getw(FILE *fp);

Funes fgets() e fputs()


So funes para ler e escrever strings. prottipo : char *fputs(char *str, FILE *fp); char *fgets(char *str, int tamanho, FILE *fp);

Funes fread() e fwrite()


So funes que permitem ler e gravar blocos de dados. prottipo : unsigned fread(void *buffer, int num_bytes int count,FILE *fp); unsigned fwrite(void *buffer, int num_bytes, int count,FILE *fp);

Funo fseek()
Para acesso randomico. prottipo : int fseek(FILE *fp, long numbytes, int origem); origem pode ser: Comeo do arquivo Posio corrente Fim do arquivo
www.goulart.pro.br/arquivos.html

SEEK_SET SEEK_CUR SEEK_END

0 1 2
5/7

11/30/2009

Linguagem C - Entrada e Saida

Exemplo: Programa DUMP


/* DUMP : Um utilitario para visualizar disco usando fseek do livro Turbo C , Schildt pag. 228 */ #include <stdio.h> #include <ctype.h> /* devido ao isprint() */ #include <stdlib.h> /* devido ao exit() */ #define TAMANHO 128 char buf [TAMANHO]; void display (int numlido); main (int argc, char *argv[]) { FILE *fp; int setor, numlido; /* verifica num de argumentos */ if (argc != 2) { printf("use: dump nome do arquivo\n"); exit(1); } if ((fp=fopen(argv[1], "rb")) == NULL) { printf("o arquivo nao pode ser aberto \n"); exit (1); } for(;;) { printf("informe o setor (-1 para terminar): "); scanf("%ld", &setor); if(setor < 0) break; if(fseek(fp, setor*TAMANHO, SEEK_SET)) printf("erro de busca\n"); if((numlido=fread(buf, 1, TAMANHO, fp)) != TAMANHO) printf("EOF encontrado \n"); display(numlido); } return 0; } /* funcao para exibir arquivo */ void display(int numlido) { int i, j; for(i=0; i< numlido/16; i++) { for (j=0; j<16; j++) printf("%3X", buf [i*16+j]); printf("|"); for (j=0; j<16; j++) { if (isprint (buf [i*16 + j])) printf("%c", buf[i*16+j]); else printf("."); } printf("\n"); }
www.goulart.pro.br/arquivos.html 6/7

11/30/2009

Linguagem C - Entrada e Saida

www.goulart.pro.br/arquivos.html

7/7