Fcntl dans Linux
Dans le système d'exploitation Linux, l'appel FCNTL se fait via les descripteurs. Par exemple, un verrouillage de lecture est placé sur un descripteur de fichiers lisible, et un cas similaire concerne le verrouillage d'écriture. Un descripteur de fichiers représente le numéro de fichier ouvert. Il est pratique pour le programme de se rappeler sur quel fichier il travaille. Lorsque nous ouvrons un fichier, le numéro qui n'est pas déjà attribué et est gratuit est donné au fichier dans le tableau descripteur du fichier de processus. Et dans le cas de la fermeture d'un fichier, ce numéro attribué est supprimé du tableau descripteur du processus.
Syntaxe
#inclureTout d'abord, nous définissons la bibliothèque FCNTL pour que le processus réalise facilement. L'appel de fonction contient principalement deux arguments dans le paramètre. L'un est le descripteur, tel que défini ci-dessus; il définit le fichier sur lequel la commande de contrôle doit être appliquée. En d'autres termes, sur lequel les attributs doivent être modifiés. Le second est la commande qui est appliquée aux descripteurs spécifiés.
Comment FCNTL modifie les propriétés des fichiers
La fonction FCNTL est utilisée à cinq fins différentes, incluant principalement la duplication, le réglage des drapeaux, etc.; Chacun est décrit ici en détail.
Cmd = f_dupfd
Dupliquez le descripteur des fichiers. La nouvelle valeur dupliquée est renvoyée à la fonction. Cette valeur est la plus basse qui n'est pas déjà ouverte ou allouée à aucun autre descripteur. Il est toujours considéré comme un entier, et la valeur est toujours supérieure au troisième argument. De plus, la valeur dupliquée a ses indicateurs de descripteur de fichiers. Le nouveau descripteur a la même entrée dans le tableau que le descripteur d'origine.
Cmd = getfd
Cette fonction a la spécialité pour retourner les drapeaux du descripteur comme valeur de fonction. Comme son nom l'indique, nous obtenons l'indicateur après l'avoir réglé.
Cmd = setfd
Comme obtenir l'indicateur, cette fonction est utilisée pour définir l'indicateur du descripteur. Le programme définit l'indicateur sur 0, ne fermez pas sur l'exec, ou sur 1, pour fermer sur exec.
Cmd = f_getfl
Cette fonction renvoie les indicateurs pour l'état du fichier comme valeur d'une fonction. Lorsque l'état de l'indicateur est décrit comme un indicateur ouvert, nous décrivons les indicateurs d'état.
Cmd = f_setfl
Il définit l'indicateur d'état dans le fichier. Comme Getfl est utilisé pour renvoyer l'état du fichier.
Cmd = f_getown
Cette fonction est liée à l'identité de processus car elle renvoie l'ID de processus et l'ID de groupe de processus.
Cmd = f_setown
Cette fonction a tendance à créer et à définir l'ID de processus ou l'ID de processus de groupe.
La valeur de retour du FCNTL dépend de la commande utilisée. Si les commandes rencontrent une erreur, elle renvoie -1. Si chaque fonction ne subit aucun problème, alors toute autre valeur sauf -1 est renvoyée. Alors que dans le cas de F_Getown, l'ID renvoyé peut être une valeur positive ou une valeur négative.
Maintenant, nous allons ajouter quelques exemples élémentaires ici. Pour implémenter les codes de FCNTL, vous devez avoir un éditeur de texte et un terminal Linux pour obtenir la valeur résultante.
Exemple 1
Considérez un exemple dans lequel nous avons créé, puis rédigé une nouvelle ligne dans un exemple de fichier texte. Cet exemple n'utilisera pas l'implication de FCNTL en fonction. Les fonctionnalités de cette fonction seront implémentées dans le code uniquement en utilisant une bibliothèque.
#inclureNous allons écrire une chaîne sur le code, nous devons donc utiliser la bibliothèque de chaînes. Nous avons pris un tableau de descripteurs de fichiers ici. De plus, un tableau de caractères a été pris qui est directement initialisé avec une chaîne de certains caractères. Avec l'aide du descripteur de fichier, nous utiliserons certaines opérations de fichier de l'état du drapeau de fichier comme la lecture et l'écriture dans le fichier, etc. Si le fichier est déjà créé, vous devez l'ouvrir et écrire la chaîne dedans.
Fd [0] = ouvert ("échantillon.txt ", o_rdwr);Cette déclaration ouvrira le fichier nommé 'Exemple.txt 'en utilisant le drapeau o_rdwr. Maintenant, pour ajouter que la chaîne définit plus tôt, elle sera entrée dans le fichier.
Write (fd [0], bf1, strlen (buf1));Grâce à l'option de lecture, la chaîne sera affichée sur l'exécution du code à partir du fichier. Les deux descripteurs de fichiers sont fermés à la fin.
Après avoir enregistré le fichier, nous utiliserons un compilateur GCC pour l'exécution du fichier.
$ gcc -o fichier de fichier.cLorsque le code est exécuté, vous verrez qu'une chaîne s'affiche que nous avons écrite dans le code dans un fichier. Cette déclaration a été récupérée à partir du fichier. Lorsque vous allez dans les fichiers d'Ubuntu, vous verrez l'échantillon.fichier txt. Vous remarquerez que la chaîne est écrite dans le fichier via le code lors de l'ouverture du fichier.
Exemple 2
Ceci est un exemple de la commande f_getfl. Il renvoie l'indicateur d'état du fichier comme valeur de fonction. Tout d'abord, le fichier sera ouvert; S'il n'est pas déjà créé, O_Creat créera le fichier; Tout d'abord, toutes ces fonctions d'état du drapeau sont indiquées ci-dessous pour faciliter la compréhension.
O_RDONLY: cette fonction ouvre le fichier à des fins de lecture uniquement.
O_wronly: traite uniquement l'objectif d'écriture.
O_RDWR: C'est également pour le processus de lecture et d'écriture.
O_APPEND: Ajoute chaque fonction d'écriture sur le fichier actuel.
Ce sont le drapeau principal utilisé dans l'exemple. Revenant à l'exemple, si la valeur renvoyée en ouvrant le fichier est inférieure à 0, alors un message d'erreur s'affiche.
Après l'ouverture, vous devez obtenir le fichier; Si l'état du fichier est -1, un message d'erreur s'affiche; Sinon, l'état du fichier sera reçu. Maintenant, avec l'aide du mode d'accès, nous obtiendrons l'indicateur du descripteur de fichier. Toutes les options seront vérifiées dans l'instruction IF-ELSE. L'option en fonction de l'état du fichier aura opté respectivement. En fin de compte, si l'état du descripteur de fichier est supérieur à 1, cela signifie que le fichier est fermé maintenant.
Compiler le code; Vous verrez que toutes les instructions sont affichées en fonction de l'état FD, le fichier est ouvert ou fermé.
Conclusion
L'article 'C: Fonction Fcntl Utilisation' contient les caractéristiques de la fonction FCNTL. Le descripteur de fichiers joue un rôle essentiel dans le processus de traitement des fichiers concernant toute fonctionnalité. Nous avons également utilisé des exemples de drapeaux dans le cas de la lecture et de l'écriture dans le fichier. Les deux exemples expliqués ici vous seront utiles dans l'utilisation de FCNTL dans le langage de programmation C.