C FCNTL Uso da função

C FCNTL Uso da função
Como o nome indica que o FCNTL é abreviado como controle de 'arquivo'. Isso significa que é baseado no processo de manuseio de arquivos. O FCNTL é uma chamada do sistema. Ele permite que o programa coloque uma leitura ou um bloqueio de gravação. Esta função pode ser usada para alterar as propriedades do arquivo que já estão abertas ou podem ser abertas através de qualquer ação aplicada a ele. É uma função versátil e é usada para modificar arquivos de várias maneiras, como aberto, leitura e gravação, etc. Este artigo é sobre as funções de controle nos arquivos.

Fcntl no linux

No sistema operacional Linux, a chamada FCNTL é feita através dos descritores. Por exemplo, um bloqueio de leitura é colocado em um descritor de arquivo legível, e um caso semelhante é para o bloqueio de gravação. Um descritor de arquivo representa o número do arquivo que é aberto. É conveniente para o programa lembrar em qual arquivo está trabalhando. Quando abrimos um arquivo, o número que ainda não está atribuído e está livre é fornecido ao arquivo na tabela descritor do arquivo de processos. E, no caso de fechar um arquivo, esse número atribuído é removido da tabela descritor do processo.

Sintaxe

#incluir
int fcntl (descritor inteiro, cmd inteiro)

Em primeiro lugar, definimos a biblioteca FCNTL para fazer o processo realizar facilmente. A chamada de função contém principalmente dois argumentos no parâmetro. Um é o descritor, conforme definido acima; Ele define o arquivo no qual o comando do controle deve ser aplicado. Em outras palavras, sobre o qual os atributos precisam ser alterados. O segundo é o comando que é aplicado aos descritores especificados.

Como o FCNTL altera as propriedades do arquivo

A função FCNTL é usada para cinco propósitos diferentes, incluindo duplicação, sinalizadores de configuração, etc.; Cada um é descrito aqui em detalhes.

Cmd = f_dupfd

Duplicar o descritor de arquivos. O novo valor duplicado é retornado à função. Este valor é o mais baixo que ainda não está aberto ou atribuído a nenhum outro descritor. É sempre considerado um número inteiro, e o valor é sempre maior que o terceiro argumento. Além disso, o valor duplicado tem seus sinalizadores de descritores de arquivos. O novo descritor tem a mesma entrada na tabela que o descritor original tem.

Cmd = getfd

Esta função tem a especialidade de devolver as bandeiras do descritor como o valor da função. Como o nome indica, temos a bandeira depois de defini -lo.

Cmd = setfd

Como conseguir a bandeira, essa função é usada para definir a bandeira do descritor. O programa definiu o sinalizador para 0, não feche no executivo ou em 1, para fechar no executivo.

Cmd = f_getfl

Esta função retorna os sinalizadores para o status do arquivo como o valor de uma função. Quando o status da bandeira é descrito como uma bandeira aberta, descrevemos os sinalizadores de status.

Cmd = f_setfl

Ele define o sinalizador de status para o arquivo. Como getfl é usado para retornar o status do arquivo.

Cmd = f_getown

Esta função está relacionada à identidade do processo, à medida que retorna o ID do processo e o ID do grupo de processo.

Cmd = f_setown

Esta função tende a criar e definir ID de processo ou ID do processo de grupo.

O valor de retorno do FCNTL depende do comando usado. Se os comandos encontrarem um erro, ele retorna -1. Se toda função não sofrer problema, qualquer outro valor, exceto -1. Enquanto no caso de f_getown, o ID retornou pode ser um valor positivo ou um valor negativo.

Agora vamos adicionar alguns exemplos elementares aqui. Para implementar os códigos do FCNTL, você precisa ter um editor de texto e um terminal Linux para obter o valor resultante.

Exemplo 1

Considere um exemplo em que criamos e depois escrevemos uma nova linha em um arquivo de texto de amostra. Este exemplo não usará o envolvimento do FCNTL como uma função. Os recursos desta função serão implementados apenas no código usando uma biblioteca.

#incluir

Vamos escrever uma string para o código, por isso precisamos usar a biblioteca de string. Tomamos uma variedade de descritores de arquivos aqui. Além disso, foi tomada uma matriz de personagens que é diretamente inicializada com uma sequência de alguns caracteres. Com a ajuda do descritor de arquivos, usaremos algumas operações de arquivo do status da bandeira do arquivo, como ler e escrever no arquivo, etc. Se o arquivo já estiver criado, você precisará abri -lo e escrever a string nele.

Fd [0] = aberto ("amostra.txt ", o_rdwr);

Esta declaração abrirá o arquivo chamado 'amostra.txt 'usando a bandeira O_RDWR. Agora, para adicionar a string define anteriormente, ela será inserida no arquivo.

Write (FD [0], BF1, Strlen (Buf1));

Através da opção de leitura, a string será exibida na execução do código do arquivo. Ambos os descritores de arquivo estão fechados no final.

Depois de salvar o arquivo, usaremos um compilador GCC para a execução do arquivo.

$ GCC -O FILE.c
$ ./arquivo

Quando o código for executado, você verá que uma string é exibida que escrevemos no código para um arquivo. Esta declaração foi buscada no arquivo. Quando você for aos arquivos no Ubuntu, você verá a amostra.arquivo txt. Você notará que a string está escrita no arquivo através do código na abertura do arquivo.

Exemplo 2

Este é um exemplo do comando f_getfl. Ele retorna o sinalizador de status do arquivo como o valor da função. Primeiro, o arquivo será aberto; Se ainda não estiver criado, o O_Creat criará o arquivo; Primeiro, todas essas funções de status do sinalizador são declaradas abaixo para facilitar o entendimento.

O_RDONLY: Este recurso abre o arquivo apenas para a finalidade de leitura.

O_WRONLY: lida apenas com o propósito de escrita.

O_rdwr: é para o processo de leitura e escrita também.

O_APPEND: Anexa em cada função de escrita no arquivo atual.

Estes são a bandeira principal que é usada no exemplo. Voltando ao exemplo, se o valor retornado abrindo o arquivo for menor que 0, uma mensagem de erro será exibida.

Após a abertura, você precisa obter o arquivo; Se o status do arquivo for -1, uma mensagem de erro será exibida; Caso contrário, o status do arquivo será recebido. Agora, com a ajuda do modo de acesso, obteremos a bandeira do descritor de arquivo. Todas as opções serão verificadas através da declaração if-else. A opção de acordo com o status do arquivo terá optado respectivamente. No final, se o status do descritor de arquivo for maior que 1, significa que o arquivo está fechado agora.

Compilar o código; Você verá que todas as declarações são exibidas de acordo com o status de FD, o arquivo é aberto ou fechado.

Conclusão

O artigo 'C: Uso da Função FCNTL' contém os recursos da função FCNTL. O descritor de arquivos desempenha um papel vital no processo de manuseio de arquivos em relação a qualquer recurso. Também usamos alguns exemplos de bandeira, no caso de ler e escrever no arquivo. Ambos os exemplos explicados aqui serão úteis para você na utilização do FCNTL na linguagem de programação C C.