digite <enter>: ");gets(string);fputs(string, pf);putc(\n, pf);if(ferror(pf)){perror("Erro na gravacao");fclose(pf);exit(1);}} while (strlen(string) > 0);fclose(pf);}freadPodemos escrever e ler blocos de dados. Para tanto, temos as funcoes fread() efwrite(). O prototipo de fread() e:unsigned fread (void *buffer, int numero_de_bytes, int count, FILE *fp);O buffer e a regiao de memoria na qual serao armazenados os dados lidos. O numero debytes e o tamanho da unidade a ser lida. count indica quantas unidades devem ser lidas. Istosignifica que o numero total de bytes lidos e:numero_de_bytes*countA funcao retorna o numero de unidades efetivamente lidas. Este numero pode ser menorque count quando o fim do arquivo for encontrado ou ocorrer algum erro.Quando o arquivo for aberto para dados binarios, fread pode ler qualquer tipo de dados.fwriteA funcao fwrite() funciona como a sua companheira fread(), porem escrevendo noarquivo. Seu prototipo e:82unsigned fwrite(void *buffer,int numero_de_bytes,int count,FILE *fp);A funcao retorna o numero de itens escritos. Este valor sera igual a count a menos queocorra algum erro.O exemplo abaixo ilustra o uso de fwrite e fread para gravar e posteriormente ler umavariavel float em um arquivo binario.#include <stdio.h>#include <stdlib.h>int main(){FILE *pf;float pi = 3.1415;float pilido;if((pf = fopen("arquivo.bin", "wb")) == NULL) /* Abre arquivo binario para escrita */{printf("Erro na abertura do arquivo");exit(1);}if(fwrite(&pi, sizeof(float), 1,pf) != 1) /* Escreve a variavel pi */printf("Erro na escrita do arquivo");fclose(pf); /* Fecha o arquivo */if((pf = fopen("arquivo.bin", "rb")) == NULL) /* Abre o arquivo novamente para leitura */{printf("Erro na abertura do arquivo");exit(1);}if(fread(&pilido, sizeof(float), 1,pf) != 1) /* Le em pilido o valor da variavel armazenadaanteriormente */printf("Erro na leitura do arquivo");printf("\nO valor de PI, lido do arquivo e: %f", pilido);fclose(pf);return(0);}Note-se o uso do operador sizeof, que retorna o tamanho em bytes da variavel ou do tipode dados.fseekPara se fazer procuras e acessos randomicos em arquivos usa-se a funcao fseek(). Estamove a posicao corrente de leitura ou escrita no arquivo de um valor especificado, a partir deum ponto especificado. Seu prototipo e:int fseek (FILE *fp,long numbytes,int origem);O parametro origem determina a partir de onde os numbytes de movimentacao seraocontados. Os valores possiveis sao definidos por macros em stdio.h e sao:Nome Valor SignificadoSEEK_SET 0 Inicio do arquivoSEEK_CUR 1 Ponto corrente no arquivoSEEK_END 2 Fim do arquivo83Tendo-se definido a partir de onde ira se contar, numbytes determina quantos bytes dedeslocamento serao dados na posicao atual.rewindA funcao rewind() de prototipovoid rewind (FILE *fp);retorna a posicao corrente do arquivo para o inicio.removePrototipo:int remove (char *nome_do_arquivo);Apaga um arquivo especificado.O exercicio da pagina anterior poderia ser reescrito usando-se, por exemplo, fgets() efputs(), ou fwrite() e fread(). A seguir apresentamos uma segunda versao que se usa dasfuncoes fgets() e fputs(), e que acrescenta algumas inovacoes.#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){FILE *p;char str[30], frase[] = "Este e um arquivo chamado: ", resposta[80];int i;/* Le um nome para o arquivo a ser aberto: */printf("\n\n Entre com um nome para o arquivo:\n");fgets(str,29,stdin); /* Usa fgets como sefosse gets */for(i=0; str[i]; i++) if(str[i]==\n) str[i]=0; /* Elimina o \n da string lida */if (!(p = fopen(str,"w"))) /* Caso ocorra algum erro naabertura do arquivo..*/{ /* o programa abortaautomaticamente */printf("Erro! Impossivel abrir o arquivo!\n");exit(1);}/* Se nao houve erro, imprime no arquivo, e o fecha ...*/fputs(frase, p);fputs(str,p);fclose(p);/*