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
#incluirEm 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.
#incluirVamos 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.cQuando 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.