Leia Syscall no Linux

Leia Syscall no Linux

“Como o título diz que a chamada do sistema de leitura deve estar lendo algo de um local específico. Linux nos fornece a chamada do sistema de leitura para ler dados de qualquer arquivo e exibi -los no console, e o kernel do sistema Linux deve estar envolvido em todo esse processo, i i.e., Para abrir o arquivo, leia dele, escreva dados para outro arquivo, etc. Este guia será um bônus para todos os usuários Linux e C que desejam aprender a usar a chamada do sistema de leitura enquanto codifica. Antes de dar uma olhada no snippet de código C, vamos criar um arquivo de texto e um arquivo C. O arquivo de texto conterá dados de texto aleatórios que serão usados ​​pela função read (). Ambos os arquivos são criados pela mesma consulta "Touch" uma após a outra, e a consulta "LS" mostra -os em uma pasta doméstica.”

Adicionamos 3 linhas de texto no arquivo de texto.arquivo txt para que possamos acessá -lo usando a função read () de c. Essas três linhas são exibidas usando a consulta "Cat".

Exemplo 01

Em nosso primeiro exemplo, demonstraremos o uso da Função de Chamada ou Posix read () para acessar os dados de um arquivo específico e exibi -los no console. O código de exemplo começa com os 3 arquivos básicos de cabeçalho. O stdio.h e unistd.Os cabeçalhos H são usados ​​para funções mutáveis ​​padrão de entrada/saída. O fcntl.h é usado para utilizar as funções de leitura e gravação do POSIX para criar e acessar os arquivos. O trecho mostrado abaixo foi iniciado com a declaração de um buffer de caractere de tamanho 100. Os dados de texto que foram mostrados no arquivo de texto.O arquivo txt da imagem acima será acessado e exibido em pedaços.

A instrução printf () é utilizada 3 vezes para nos informar sobre o número de caracteres totais será buscada no arquivo e exibida no console. Três descritores de arquivos, F1, F2 e F3, são usados ​​separadamente para chamar a função "aberta ()" de C para abrir um arquivo de texto.Arquivo TXT em um modo somente leitura usando a opção "O_RDONLY". As variáveis ​​N1, N2 e N3 são utilizadas para buscar o resultado retornado de chamar a função de "leitura" 3 vezes, respectivamente.

Cada vez, estamos passando um buffer ou matriz do tipo personagem, eu.e., Arr, um descritor de arquivo diferente, eu.e., F1, F2, F3 e um número diferente de caracteres a serem acessados ​​do arquivo e salvos para buffer, eu.e., 20, 40 e 60, respectivamente. Cada vez, usamos o resultado retornado, eu.e., n1, n2, n3, dentro da chamada de função write () para acessar a variável buffer "arr" com o primeiro parâmetro como "1". Esta função de gravação exibiria 20, 40 e 60 caracteres depois de ler o arquivo de texto do arquivo.txt no buffer de personagem "arr". A instrução printf () foi usada cada vez para adicionar uma quebra de linha usando "\ n" em sua área de cordas.

Dessa forma, toda vez, alguns dados de texto seriam exibidos no shell após a função read () acessá -los do arquivo “TextFile.TXT.”Vamos salvar rapidamente nosso código antes da compilação.

#incluir
#incluir
#incluir
int main ()
Char arr [100];
printf ("lendo 20 caracteres… \ n");
int f1 = aberto ("TextFile.txt ", o_rdonly);
int n1 = leia (f1, arr, 20);
Escreva (1, arr, n1);
printf ("\ n");
printf ("Reading 40 caracteres… \ n");
int f2 = aberto ("TextFile.txt ", o_rdonly);
int n2 = leia (f2, arr, 40);
Escreva (1, arr, n2);
printf ("\ n");
printf ("Reading 60 caracteres… \ n");
int f3 = aberto ("TextFile.txt ", o_rdonly);
int n3 = leia (f3, arr, 60);
Escreva (1, arr, n3);
printf ("\ n");

Após a compilação deste código com o compilador "GCC" C, tentamos o “./a.OUT "comando para executar o código compilado. Ele mostra 20, 40 e 60 caracteres do arquivo de texto usando “Read.”

Exemplo 02

Digamos que você tenha mostrado dados de abastecimento em um arquivo de texto.arquivo txt e você deseja transferir um número exato de caracteres para outro arquivo. Para isso, você estará utilizando a função read () para ler os dados do arquivo de origem, e a função de gravação será usada para salvá -lo no arquivo de destino.

Agora, usaremos os mesmos cabeçalhos que utilizamos no exemplo acima para ler de um arquivo para uma variável buffer. O método principal () deste código é inicializado com uma matriz de tamanho 40 caracteres “ARR.”As declarações de saída printf () são utilizadas em cada etapa para explicar cada e tudo em detalhes, eu.e., A abertura de um arquivo, lendo de um arquivo, criando outro arquivo, copiando dados do primeiro arquivo para o segundo arquivo, etc. Junto com isso, usamos a função SLEEP () na inicialização de cada etapa neste código de exemplo. Após a primeira função Sleep (), estamos usando a função Open () para abrir nosso arquivo chamado “TextFile.txt ”em um modo de leitura e salve o resultado de retorno no descritor de arquivo fd1.

Na próxima etapa, usaremos a função read () para ler os dados do arquivo de texto.txt usando o descritor de arquivo fd1. Você tem que observar uma coisa; Estamos lendo apenas os 30 caracteres do arquivo e salvando -os na matriz de personagens “ARR.“Se a função read () funcionar bem, ele retornará algum número de sucesso à variável inteira“ n.”Na terceira etapa, estamos criando outro arquivo chamado“ Dest.txt ”usando a função Open () mais uma vez.

Duas opções foram fornecidas à função aberta nesta etapa. Na última etapa, estamos lançando a chamada do sistema Write (), passando o descritor de arquivo FD2, a variável "n" e o Buffer Array "ARR" para copiar os dados do buffer "ARR" para o segundo arquivo usando F2.

#incluir
#incluir
#incluir
int main ()
Char arr [40];
printf ("Abertura do TextFile.txt no modo somente leitura… \ n ");
sono (3);
int fd1 = aberto ("TextFile.txt ", o_rdonly);
printf ("lendo a partir dele… \ n");
sono (3);
int n = leia (fd1, arr, 30);
printf ("Criando outro arquivo para escrever nele… \ n");
sono (3);
int fd2 = aberto ("destin.txt ", o_creat | o_wronly, 0642);
printf ("escrevendo textfile.Dados txt para destinação.arquivo txt… \ n ");
sono (3);
escreva (fd2, arr, n);
printf ("\ n");

Nesta execução do código, o primeiro arquivo foi aberto e a matriz "arr" leu os dados dele.

O novo arquivo foi criado em um modo de gravação.

Os dados da matriz de caracteres "arr" são passados ​​para o segundo arquivo.

Os dados de 30 caracteres foram copiados com sucesso para o destes.Arquivo TXT, conforme exibido abaixo.

Conclusão

Neste guia, explicamos brevemente o uso do sistema read () Chamada no idioma C. Para isso, utilizamos as matrizes de buffer para ler dados de um arquivo específico e exibi -los no console. Além disso, usamos a função read () e o conjunto de buffer para copiar dados de texto de um arquivo para outro.