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:
#incluirComo 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 1A 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);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:
#incluirA 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.