Gravar função na linguagem C

Gravar função na linguagem C

Gerenciamento de arquivos na programação é uma tarefa em que o programador deve ser fluente. O conhecimento das várias funções de abertura, leitura e gravação é essencial porque sempre precisamos que elas armazenem ou descartem as informações armazenadas nos arquivos.

Neste artigo do Linux, você aprenderá como usar a função write () para escrever os arquivos.

Explicaremos tudo sobre essa ella, sua sintaxe, o método de chamada, os argumentos de entrada e saída, o tipo de dados que aceita em cada caso e como declará -lo corretamente.

Em seguida, aplicamos o que aprendemos colocando o uso dessa função em exemplos práticos que preparamos para você com trechos e imagens de código, mostrando o uso de write () na linguagem C.

Para que você tenha um conhecimento abrangente do uso da função write (), adicionamos uma seção especial que descreve os erros individuais que podem ocorrer ao usar essa função, bem como sua detecção e identificação, para que você tenha o Técnicas necessárias para uma solução rápida em caso de ocorrência.

Sintaxe da função write () na linguagem C

int write (int fd, void *buf, size_t n);

Descrição da função write () na linguagem C

A função write () grava em um arquivo aberto. Esta função escreve o conteúdo do buffer que é apontado pelo "buf" para o arquivo especificado por seu descritor no argumento de entrada "FD". O tamanho do bloco a ser escrito no arquivo deve ser especificado no argumento de entrada "n".

Para poder escrever com a função write (), o arquivo deve ser aberto com a função Open () e especificado nos atributos O_RDONLY ou O_RDWR. Caso contrário, esta função não tem efeito.

Se a chamada for bem -sucedida, ele retornará o número de caracteres que são inseridos. Se ocorrer um erro ao escrever, ele retornará um resultado igual a -1. O código de identificação que indica que o erro pode ser recuperado da variável Global Errno, que é definida no “errno.H ”cabeçalho.

Mais tarde, você encontrará uma seção em que explicamos como detectar e identificar os erros mais comuns desta função.

A função write () é definida no “unistd.H ”cabeçalho. As bandeiras que definem os atributos e o modo para abrir o arquivo são definidos em “FCNTL.h ". Para usar as funções Open () e Write (), você deve incluir esses cabeçalhos no seu código da seguinte forma:

#incluir
#incluir

Como escrever em um arquivo usando a função write () na linguagem C

Neste exemplo, escrevemos um arquivo de texto vazio chamado “Exemplo.txt ”que criamos no início do diretório“ documentos ”.

O primeiro passo é inserir os cabeçalhos necessários. Dentro da função Main (), abra o arquivo com a função Open (). Para fazer isso, precisamos declarar o número inteiro "FD" que serve como descritor de arquivo e o conjunto de buffer de 1024 caracteres "BUF" que contém o texto que queremos escrever no arquivo. Neste buffer, armazenamos o primeiro parágrafo da página do GCC Man para escrevê -lo no “Exemplo.arquivo txt ”.

Depois de abrir o arquivo com a função Open () no modo de leitura/gravação, escrevemos no arquivo chamando a função write () e passando o descritor de arquivo "FD" como o primeiro argumento de entrada, o ponteiro "buf" como o segundo argumento, e o tamanho da string que está contida na matriz como o terceiro argumento, que obtemos com a função strlen (). Aqui está o código para este exemplo:

#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
void main ()

int fd;
Char buffer [1024] = "Quando você invoca o GCC, normalmente faz pré -processamento, compilação, montagem e vinculação. As opções gerais permitem que você interrompa esse processo em um estágio intermediário. Por exemplo, a opção -c diz para não executar o vinculador.Em seguida, a saída consiste em arquivos de objeto em saída pelo assembler.";
fd = aberto ("documentos/exemplo.txt ", o_rdwr);
escreva (fd, & buffer, strlen (buffer));
fechar (FD);

Na figura a seguir, vemos a compilação e a execução deste código, juntamente com o arquivo aberto que é escrito pela função write ():

Como adicionar um texto no final de um arquivo com a função write () na linguagem C

Quando um arquivo é aberto especificando as bandeiras O_WRONLY ou O_RDWR, o cursor pula para a primeira posição e começa a escrever a partir daí.

Para adicionar um texto no final de um arquivo, ele deve ser especificado por uma operação lógica ou entre os sinalizadores O_WRONLY ou O_RDWR e o sinalizador O_ Anexar no sinalizador de entrada da função Open () quando o arquivo é aberto. Dessa forma, o cursor é colocado no final do arquivo e a escrita começa a partir daí. Além disso, os atributos e o modo de gravação podem ser alterados assim que o arquivo for aberto com a função fcntl ().

Na ilustração a seguir, você pode ver um código que adiciona um texto no final do arquivo que escrevemos no exemplo anterior:

#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
void main ()

int fd;
char buffer [1024] = "Este texto é adicionado. Este texto é adicionado.";
fd = aberto ("documentos/exemplo.txt ", o_rdwr | o_append);
escreva (fd, & buffer, strlen (buffer));
fechar (FD);

A imagem a seguir mostra o texto adicionado. Como você pode ver, com esse método de abertura, a função write () começa a escrever na posição do último personagem que é escrito no arquivo:

Como detectar e identificar os erros que podem ocorrer ao usar a função write () na linguagem C

Usando write () pode gerar vários erros. Quando isso acontece, esta função retorna um resultado igual a -1.

A maneira mais fácil de determinar se ocorreu um erro é usar uma condição "se" em que a condição seja o valor de retorno de -1. Agora, vamos ver como você pode usar esse método para determinar se ocorreu um erro:

int n;
n = write (fd, & buffer, strlen (buffer));
if (n == -1)
printf ("Ocorreu um erro ao tentar escrever o arquivo.");

Se a função write () retornar com um erro, ela transita para a instrução "se" e imprime a mensagem, "Ocorreu um erro ao tentar escrever o arquivo““.

Quando ocorre um erro, um código numérico é armazenado automaticamente na variável Global Errno, que é definida no “errno.H ”cabeçalho. Este código pode ser usado para identificar o erro que ocorreu.

A seguir, é apresentado um trecho com os erros que a função write () pode gerar e que são definidos no “errno.H ”Cabeçalho, juntamente com uma breve descrição de cada erro e o valor inteiro associado:

Definição Valor em errno Erro
Eagin 11 Tente novamente.
Ebadf 9 Número do arquivo incorreto.
Edestaddrreq 89 Endereço de destino necessário.
Edquot 122 Cota excedida.
Efault 14 endereço incorreto.
Efbig 27 Arquivo muito grande.
Eintr 4 Chamada de sistema interrompida.
Einval 22 Argumento inválido.
Eio 5 Erro de E/S.
Enospc 28 Nenhum espaço deixado no dispositivo.
Eperm 1 Operação não permitida.

A maneira mais fácil de identificar um erro é abrir um interruptor em que a variável errno é a condição de salto e cada caso é uma definição de erro.

Em seguida, vejamos um exemplo em que tentamos entrar em um descritor com um sinal negativo, resultando em um erro. Para identificar um erro, usamos a condição "se" que vimos no trecho anterior. Para identificá -lo, abrimos um interruptor com os três erros mais comuns que essa função pode produzir.

#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
void main ()

int fd;
int n;
char buffer [1024] = "Hello World";
fd = aberto ("documentos/exemplo.txt ", o_rdwr);
n = gravação (-2, & buffer, strlen (buffer));
if (n == -1)
switch (errno)
case ebadf:
printf ("Número de arquivo ruim. Erro: %i \ n ", errno);
quebrar;
Caso Einval:
printf ("argumento inválido. Erro: %i \ n ", errno);
quebrar;
Caso EIO:
printf ("Erro de E/S . Erro: %i \ n ", errno);
quebrar;


Como podemos ver na figura a seguir, a função write () retorna um erro quando um descritor inválido é passado como um argumento de entrada. O valor que é recuperado da variável errno é usado como uma condição de salto que nos permite identificar o erro ao entrar no caso do eBadf.

Conclusão

Neste artigo da dica do Linux, mostramos como usar a função write () para gravar nos arquivos. Mostramos a você a sintaxe e a descrição teórica desta função. Também explicamos os métodos de detecção e identificação de erros para que você tenha as ferramentas e técnicas necessárias para resolver rapidamente esses problemas.

Para ajudá -lo a ver como Write () funciona, implementamos o uso dessa função em exemplos práticos com códigos e imagens que mostram o uso deste e das outras funções de processamento de arquivos.

Também mostramos como selecionar o modo de abertura do arquivo para inserir um texto no início ou no final do arquivo, e quais funções estão disponíveis para alterar esses atributos.