Olá e bem-vindos de volta.
Estamos em uma nova seção.
Esta seção trata de entrada e saída de arquivos escritos e lidos a partir de arquivos.
Vamos nos concentrar em arquivos de texto, mas também vamos falar um pouco sobre arquivos binários.
Nesta palestra, quero apenas dar uma visão geral, dizer-lhe o que é um arquivo e dizer-lhe como é bom uso
para o armazenamento de dados persistentes.
Portanto, até este ponto, todos os dados que nosso programa acessa são via memória.
Estamos familiarizados com este conceito de variáveis, estruturas, seja ele qual for.
Apague todos os dados que seu programa utiliza estão na memória.
E a razão pela qual está armazenada na memória é porque as memórias são realmente rápidas e você pode acessá-la
rapidamente para realizar cálculos.
Você está fazendo o fetch, executando o ciclo, todas essas coisas.
Portanto, o escopo, mas também é limitado porque o escopo e a variedade de nossas aplicações,
se ele usar apenas memória, será um pouco limitado.
Sabemos que a memória desaparece quando o programa desaparece, e isso pode ser muito limitador.
Todas as aplicações comerciais sérias exigem mais dados do que os que caberiam na memória principal.
A memória principal também é muito pequena, logo acima.
E hoje em dia você pode obter muita memória, de 1630 a 32 gigabytes.
Mas no passado, e especialmente nos dispositivos embutidos, você não tem tanta memória RAM e, como resultado, suas aplicações são
muito limitadas por causa do espaço e tamanho.
Você realmente só quer armazenar variáveis e coisas desse tipo na memória principal.
Isso também porque a memória principal desaparece quando o programa desaparece.
Você não pode ter nenhum dado que seja armazenado de forma persistente através de reinicializações.
Portanto, tudo depende da capacidade de processar dados que são persistentes e armazenados em um dispositivo externo, como
uma unidade de disco rígido, esses grandes programas.
Portanto, você quer ter esta capacidade de armazenar no disco rígido.
É um pouco mais lento, mas você pode armazenar muitos dados ali e grandes programas precisam armazenar
muitos dados.
C fornece muitas funções no padrão de arquivo de cabeçalho para escrita e leitura a partir de dispositivos externos.
Você não precisa escrever seu próprio código para ler e escrever os arquivos, mas você pode ver a vantagem
que as aplicações oferecem que têm a capacidade de armazenar dados por um período mais longo de tempo.
Muitas vantagens.
O dispositivo externo que você usaria para armazenar e recuperar dados é normalmente o disco rígido da unidade
de disco.
Entretanto, as funções do arquivo de cabeçalho que vamos falar sobre você podem ser usadas em qualquer dispositivo de armazenamento externo.
Assim você poderia usá-lo em um drive USB, você poderia usá-lo em qualquer dispositivo externo que armazena dados e drive SSD qualquer
coisa com todos os exemplos.
Até agora, todos os dados que o usuário entra são perdidos.
Uma vez terminado o programa, isto é chamado de memória volátil.
Sempre que você ouve esse termo memória tempo vol, isso significa que a memória não é persistente ou que os dados não são
persistentes.
Ela desaparece quando o programa termina ou se a máquina é reinicializada.
Portanto, se o usuário quiser executar o programa com os mesmos dados, ele tem que inseri-lo novamente a cada vez para que
ele seja restaurado.
É muito inconveniente.
Ela limita a programação.
E mais uma vez, esta é uma memória volátil.
Quando você armazena coisas em arquivos e as armazena no disco rígido, este é um armazenamento permanente.
Ainda está lá.
Mesmo quando você tiver reinicializado a máquina ou quando seu programa não estiver em execução.
Isso é chamado de memória não volátil porque fica em torno de um arquivo, pode armazenar dados não voláteis e geralmente é
armazenado no disco ou hoje em dia em um drive de estado sólido e SSD.
É uma seção nomeada de armazenamento e o Stud IO padrão é um arquivo contendo o uso de informações para que
se possa ler e escrever nesses arquivos.
Mas vamos usar este conceito de escrever e ler dados de um arquivo para armazenamento permanente,
e você vai notar como suas aplicações se tornam muito mais úteis, muito mais robustas, muito mais escaláveis, porque agora
temos a capacidade de armazenar grandes quantidades de dados e também não temos que nos preocupar com a eliminação dos dados
sempre que o programa terminar ou o computador for reinicializado.
Portanto, será muito, muito vantajoso usar arquivos.
Um arquivo dentro do sistema operacional Linux ou do sistema operacional Windows é armazenado de uma determinada maneira.
Mas no que diz respeito ao C, a linguagem de programação, é apenas uma seqüência de bytes em cada byte pode ser lida
individualmente.
Isto corresponde à estrutura do arquivo em Unix, mas não necessariamente.
Ele só faz diferença quando você está lendo arquivos de texto e janelas, porque você pode ter caracteres
extras com os quais você tem que se preocupar com o tamanho, mas é apenas uma seqüência de bytes.
Portanto, se você tem um arquivo de texto e ele tem mais bytes, você ainda pode ler esses bytes.
Basta entender o que esses bytes estão representando.
Então aqui está como é um arquivo e como vamos lê-lo e escrever para ele usando a linguagem de programação
C.
É apenas uma série de bytes com diferentes compensações.
O início do arquivo seria por zero, e então você pode sempre encontrar diferentes posições
no arquivo.
Podem ser quatro, podem ser quatro por dez dois, podem ser 100 bytes dentro dele.
E então você tem o final do arquivo e o final do arquivo geralmente marcado com um marcador especial chamado
EOF e um arquivo.
Portanto, um arquivo tem um começo e um fim e uma posição atual.
A posição atual é definida tantos bytes no início.
A posição atual é onde qualquer ação de arquivo ocorrerá.
Você vai escrever ou vai ler nessa posição.
E também vamos falar sobre algumas funções onde você pode se mover para mover a posição atual para onde
quiser em um arquivo.
Mesmo no final, se você quiser ler no final ou direto ao final.
Há dois tipos de arquivos.
Existem arquivos de texto e arquivos binários.
Um arquivo de texto são dados escritos como uma seqüência de caracteres organizados como linhas.
Cada linha termina com uma nova linha, e os dados de texto podem variar de sistema para sistema, dependendo de como os caracteres
são interpretados.
Assim, por exemplo, no Windows em DOS, cada linha tem um retorno de carruagem e uma alimentação de linha, portanto, uma barra invertida R e uma
barra invertida N.
E assim, quando você lê os dados ou escreve os dados, você tem que entender isto porque o formato é um pouco
diferente.
Mas no Linux você não tem nenhuma contrabarra.
R E assim você tem que entender como os dados do texto são escritos, mesmo que estejam organizados por linhas e sejam uma série
de bytes, os dados binários são escritos como uma série de bytes exatamente como aparecem na memória.
Portanto, exemplos de arquivos que possuem dados binários são dados.
Nossos arquivos como dados de imagem ou arquivos binários de codificação de música não são legíveis.
Se você tentar trazê-los em um editor de texto porque são apenas bytes, vamos nos concentrar em arquivos
de texto nesta seção, mas você pode escrever os dados que quiser em um arquivo.
Você pode escrevê-lo como uma série de bytes e como eles aparecem na memória, ou você pode escrever como texto.
Mas uma vez que o arquivo tenha sido realmente escrito, ele consistirá apenas em uma série de bytes, mesmo
que seja representado como um texto.
Você pode visualizar arquivos de texto em um editor, o que o torna mais legível.
Você tem que entender que o formato do arquivo para lê-lo é o que eu mencionei
se você estiver rodando no DOS Windows ou Linux onde o Windows pode ter caracteres extras quando ele escreve dados.
Assim, uma seqüência de 12 bytes em um arquivo binário poderia ser de 12 caracteres, poderia ser 12 oito por oito
inteiros de sinal de bit ou 12 inteiros sem assinatura.
Os incêndios binários são especialmente complicados porque eles apenas armazenam Watson como a memória aparente.
Assim, no modo binário, todo e qualquer pedaço do arquivo é acessível.
Mas para ler algo de um arquivo, você tem que entender o que está lá dentro no que diz respeito aos dados e como eles são armazenados.
E isso pode depender do sistema em que você estiver rodando.
E também vai depender se é texto ou binário.
Correntes.
Os programas C são automaticamente abertos em três arquivos em seu nome.
Um fluxo pode representar um arquivo, mas um fluxo é um termo mais genérico que pode representar qualquer tipo de entrada.
Portanto, poderia representar o teclado, poderia representar o console, poderia representar um arquivo, poderia
representar um soquete.
Se você está acostumado a correntes de rede são um termo mais genérico, e há três correntes que são abertas automaticamente
para você na linguagem de programação C.
Uma é a entrada padrão, e este é o dispositivo de entrada normal do seu sistema.
Normalmente, por padrão, é o teclado.
Temos usado a entrada padrão quando fazemos a varredura F, mas você poderia realmente usar a varredura para ler a partir
de arquivos.
Se você mudar o fluxo de entrada, talvez você mude o fluxo de entrada para uma saída padrão de arquivo que normalmente
é exibida na tela, geralmente através do console.
O erro padrão também está na tela, mas normalmente é preciso redirecioná-lo para vê-lo usando
como os amplificadores e três ou algo parecido.
Mas estas são as três saídas que mencionei.
A entrada padrão é o arquivo que é lido pela guitarra e digitaliza F A saída padrão é usada pela saída e imprime F que
temos usado principalmente printf.
Você também pode redirecionar arquivos no sistema para serem reconhecidos como a saída de entrada padrão.
Isto é um redirecionamento.
Este é um conceito de sistema operacional onde você pode redirecionar dados, enviar a saída para um arquivo, por exemplo,
ou enviar a entrada, obter a entrada de um arquivo em oposição ao padrão.
Aqui é onde você pode usar o menor ou maior que os símbolos.
O objetivo da saída de erro padrão é fornecer um lugar logicamente distinto para o envio de mensagens de erro.
Portanto, é um pouco separado, mesmo sendo exibido na tela.
Para ter acesso a isso, é preciso ter um comando especial.
O fluxo é uma representação abstrata de qualquer fonte ou destino externo de dados.
É por isso que é mais genérico do que, digamos, um arquivo.
O teclado.
A linha de comando em seus arquivos de exibição em um disco.
Esses são todos exemplos de como você trabalha com riachos.
Os fluxos serão muito mais importantes quando você começar a estudar C++.
A biblioteca C fornece funções para leitura e escrita de ou para fluxos de dados, de modo que você pode usar as mesmas funções de entrada
de saída para ler e escrever qualquer dispositivo externo que seja mapeado para um fluxo.
Por isso, mencionei que você pode usar o scan F para ler do teclado.
Você também poderia usar o scan F para ler a partir de arquivos.
Tudo depende do que a entrada, para onde o fluxo está apontando.
E assim as funções são muito, muito úteis e muito, muito flexíveis para fazer isto.
E assim, esta é apenas uma visão geral de alto nível do que é um arquivo e por que o usaríamos, como são dados
persistentes, é memória não volátil.
Ele fica por aí, vamos usá-lo e vamos usar o arquivo de cabeçalho IO padrão para ler e escrever nele
quando precisarmos armazenar dados para nosso programa e nossos programas acabam sendo muito mais robustos,
muito mais utilizáveis, muito mais flexíveis.
Assim, em nossa próxima palestra, falaremos sobre a implementação real usando as funções do cabeçalho
padrão IO.
Obrigado.