Função aberta na linguagem C

Função aberta na linguagem C

O conhecimento das funções de abertura, leitura e gravação é essencial porque sempre precisamos que elas armazenem ou descartem as informações armazenadas em arquivos. O idioma C possui duas funções básicas que você pode usar para abrir os arquivos, usando as funções Open () e FOPEN (), cada uma com diferentes métodos de chamada.

Neste artigo da dica do Linux, você aprenderá a usar a função Open (). Explicaremos tudo sobre essa função, sua sintaxe, a chamada do método, os argumentos de entrada e saída, o tipo de dados que ele aceita em cada caso e como declará -lo corretamente.

Em seguida, aplicaremos o que aprendemos implementando o uso dessa função em exemplos práticos que preparamos para você com trechos de código e imagens que mostram o uso da função aberta () na linguagem C.

Para que você tenha um conhecimento abrangente, adicionamos uma seção especial que descreva todos os erros que podem ocorrer ao usar essa função, bem como sua detecção e identificação, de modo que, caso ocorram, você tem as técnicas necessárias para um solução rápida.

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

int aberto (const char *pathname, int sinalizadores);

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

A função Open () abre um arquivo para ler ou escrever. Esta função abre o arquivo especificado no argumento de entrada do caminho do caminho. Esta entrada deve especificar o caminho absoluto ou relativo e o nome do arquivo no formato da string ou um ponteiro para ele.

O argumento de entrada dos sinalizadores especifica os atributos que o arquivo deve ter. A seguir, é apresentada uma lista dos sinalizadores que esse argumento de entrada aceita e uma breve descrição do atributo que cada um define:

Bandeira Descrição
O_RDONLY Arquivo aberto apenas para leitura.
O_wronly Arquivo aberto apenas para escrever.
O_RDWR Abra o arquivo para leitura e escrita.
O_creat Cria um arquivo no caminho e nome especificado em Nome do caminho argumento.
O_ APENDE Abre o arquivo e coloca o cursor no final do conteúdo.
O_ASYNC Ativar controle de entrada e saída por sinal.
O_CLOEXEC Habilitar o modo Close-on-EXEC no arquivo aberto.
O_NONBLOCK Desabilita o bloqueio do arquivo aberto.
O_TMPFILE Crie um arquivo temporário sem nome no caminho especificado.

Nos casos em que mais de uma bandeira é usada, uma operação lógica "ou" deve ser realizada entre eles. Isso pode ser feito dentro dos sinalizadores de argumento de entrada na mesma linha de código que a chamada de função.

Os atributos e modos podem ser alterados ou consultados assim que o arquivo for aberto com a função fcntl ().

A função Open () retorna um número inteiro que contém o descritor do arquivo aberto. Este descritor é usado como um argumento de entrada para funções de processamento de arquivos como read (), write (), etc., Para se referir ao arquivo.

Esta função é 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 a função Open (), você deve incluir estes cabeçalhos no seu código da seguinte forma:

#incluir
#incluir

Como abrir um arquivo usando a função Open () na linguagem C

Neste exemplo, usaremos a função Open () para abrir um arquivo no modo de leitura e gravação. Nesse caso, é um arquivo criado anteriormente "exemplo.TXT" que é armazenado em “Documentos”.

Passo 1: A primeira etapa é incluir os cabeçalhos necessários e declarar que ele sai vazio e retorno na função principal ().

Passo 2: O próximo passo é declarar as variáveis ​​que servem como argumentos de entrada e saída para a função Open (). Como argumento de saída, declaramos o número inteiro "FD", que é o descritor de arquivo. Como argumento de entrada, declaramos a matriz de caracteres buffer que contém a string com o caminho e o nome do arquivo a ser aberto.

Também declaramos uma matriz de 512 caracteres chamados "texto", onde armazenamos o texto que queremos escrever no arquivo que, neste caso, é o primeiro parágrafo deste artigo.

etapa 3: Depois que as variáveis ​​são declaradas, chamamos a função Open () e passamos o número inteiro "FD" como o argumento de saída, o caminho da string como o primeiro argumento de entrada e a sinalização O_WRONLY como o segundo argumento.

Passo 4: Quando o Open () retorna da chamada, ele retorna o descritor do arquivo que é aberto em "FD". Em seguida, escrevemos com a função write (), passando o descritor "FD" como o primeiro argumento de entrada, o texto da string como o segundo argumento de entrada e, finalmente, o tamanho do texto que é obtido com a função strlen (). Após a operação de gravação, fechamos o arquivo com a função Close ().

Aqui está o código completo para este exemplo:

//Passo 1
#incluir
#incluir
#incluir
#incluir
#incluir
void main ()

//Passo 2
intfd;
char buffer [] = "documentos/exemplo.TXT";
Char Texto [512] = "O conhecimento das várias funções de abertura, leitura e gravação é essencial porque sempre precisaremos que eles armazenem ou descartem informações armazenadas em arquivos.
O idioma C possui duas funções básicas que você pode usar para abrir arquivos, open () e fopen (), cada um com diferentes métodos de chamada.";
//Etapa 3
fd = aberto (buffer, o_wronly);
//Passo 4
write (fd, & text, strlen (texto));
fechar (FD);

A figura a seguir mostra a compilação e a execução deste código junto com o arquivo que acabamos de escrever. Como podemos ver, a função Open () abre o arquivo corretamente. Em seguida, usamos a função write () para escrever o conteúdo do texto. Nesse caso, ele contém o primeiro parágrafo deste artigo:


Erros que podem ocorrer ao usar a função Open (): como detectá -los e identificá -los

O uso da função Open () pode levar a vários erros. Se for esse o caso, ele retorna um resultado que é igual a -1.

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

fd = aberto ("Path/FileName", sinalizadores);
if (fd ==-1)
printf ("Ocorreu um erro ao tentar abrir o arquivo.");

Se a função Open () retornar com um erro, ele será destinado à instrução "se" e imprime a mensagem, “Ocorreu um erro ao tentar abrir o arquivo““.

Quando o Open () retorna um resultado igual a -1, ele armazena automaticamente um código numérico na variável Global Errno, que é definida no “errno.H ”cabeçalho. Este código numérico pode ser usado para identificar o erro que ocorreu.

A seguir, é apresentado um trecho dos erros que a função Open () pode gerar, juntamente com uma breve descrição de cada erro e o valor inteiro associado:

Definição Valor em errno Erro
Eperm 1 operação não permitida
Enoent 2 Não existe tal arquivo ou diretório
Eintr 4 Chamada de sistema interrompida
Enxio 6 Nenhum dispositivo ou endereço
Enomem 12 Fora da memória
Eacces 13 Permissão negada
Efault 14 Endereço ruim
Ebusy 16 Dispositivo ou recurso ocupado
Eexista 17 o arquivo existe
Enodev 19 Nenhum dispositivo
Enotdir 20 Não é um diretório
Eisdir 21 É um diretório
Einval 22 Argumento inválido
Efile 23 Tabela de arquivos Overflow
Emfile 24 Muitos arquivos abertos
ETXTBSY 26 Arquivo de texto ocupado
Enospc 28 Nenhum espaço deixado no dispositivo
Erofs 30 Sistema de arquivos somente leitura
Enametoolong 36 Nome do arquivo muito tempo
Eloop 40 Muitos links simbólicos encontrados
Eoverflow 75 Valor muito grande para o tipo de dados definido
Edquot 122 Cota excedida

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, considere um exemplo em que abrimos um arquivo que não existe, resultando em um erro. Para detectar 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
void main ()

intfd;
buffer de char [1024];
fd = aberto ("documentos/sem existência.txt ", o_append | o_rdwr);
if (fd ==-1)
switch (errno)
case eperm:
printf ("Operação não permitida. Erro: %i \ n ", errno);
quebrar;
case enoent:
printf ("Nenhum arquivo/diretório. Erro:%i \ n ", errno);
quebrar;
case enotdir:
printf ("Não é um diretório. Erro: %i \ n ", errno);
quebrar;


A imagem a seguir mostra a compilação e execução deste código. Nele, vemos como o erro gerado é detectado na condição "se" e como os erros são identificados no comutador condicional para exibir a mensagem e o valor específico:

Conclusão

Neste artigo do Linux, explicamos como usar a função Open () para abrir os arquivos.

Mostramos a sintaxe dessa função e a descrição teórica de como ela funciona, o método de chamada, os argumentos de entrada e o tipo de dados usado em cada caso.

Em seguida, implementamos o uso da função Open () em um exemplo prático usando trechos e imagens de código. Mostramos como declarar as variáveis ​​necessárias, chamar essa função para abrir um arquivo e escrever para ele.

Também incluímos uma seção em que listamos todos os erros que essa função pode gerar. Mostramos as técnicas para detectá -las e classificá -las para que você tenha os meios necessários para corrigi -los rapidamente quando eles ocorrem.