C IOCTL Fonction Utilisation

C IOCTL Fonction Utilisation
Les fichiers simples d'un système basé sur Linux peuvent facilement être lus ou écrits à l'aide de simples opérations d'entrée et de sortie. Cependant, il existe également d'autres types de fichiers complexes qui ne sont pas accessibles à l'aide de fonctions de saisie et de sortie simples. Nous utilisons la fonction «IOCTL» du langage de programmation C pour tous ces fichiers. Il signifie «Contrôle d'entrée / sortie."

Dans cet article, nous essaierons de comprendre le but de la fonction «IOCTL» du langage de programmation C en profondeur en regardant sa syntaxe. Ensuite, nous parlerons un peu du type de fichier pour lequel cette fonction est utilisée, et nous partagerons également avec vous l'emplacement où ces fichiers résident généralement. Ensuite, nous démontrerons un exemple qui utilise la fonction «IOCTL» du langage de programmation C. Enfin, nous discuterons de certaines erreurs associées à cette fonction particulière.

Le but de la fonction IOCTL en C:

En dehors des fichiers réguliers d'un système, il existe des fichiers à usage spécial, tels que les fichiers de l'appareil. Les fichiers de périphérique sont ceux qui sont utilisés pour interagir avec les différents pilotes de périphérique d'un système. Cependant, vous ne pouvez pas accéder à ces fichiers d'appareil à l'aide d'appels système réguliers. C'est là que la fonction «IOCTL» entre en jeu. Cette fonction aide à accéder très facilement à ces fichiers. La fonction «IOCTL» du langage de programmation C réside à l'intérieur du «IOCTL.Fichier d'en-tête h ”.

La syntaxe générale de cette fonction est ajoutée ci-dessous:

#define «Nom de IOCTL» _io (num1, num2, type d'argument)

Ici, «Nom de l'IOCTL» peut être remplacé par tout nom significatif que vous souhaitez pour votre fonction particulière. Ensuite, «_io» peut être laissé comme pour une fonction «IOCTL» sans paramètres; Cependant, vous pouvez également le remplacer par «_iow», «_ior» et «_iowr» pour une fonction «ioctl» ayant une écriture, une lecture, une écriture et une lecture des deux capacités. «Num1» fait référence au nombre unique attribué à notre appel «ioctl», «num2» représente le numéro unique attribué à la fonction «ioctl», tandis que le «type d'argument» fait référence aux données que cette fonction «ioctl» particulière est capable de traiter.

Où résident les fichiers de périphérique sur un système Linux?

Les fichiers de l'appareil résident généralement dans le répertoire «/ dev» d'un système basé sur Linux. Par conséquent, pour accéder à tous ces fichiers à l'aide de la fonction «IOCTL», vous devez accéder au répertoire «/ dev» de votre système.

Utilisation de la fonction IOCTL en C:

Pour vous expliquer en détail l'utilisation de la fonction IOCTL dans le langage de programmation C, nous avons utilisé un programme C simple indiqué dans les images ci-dessous. Nous avons l'intention d'ouvrir un fichier de périphérique spécifique de notre système et de lui écrire une valeur aléatoire dans ce programme. Après cela, nous voulons également lire une valeur du même fichier. Vous devez consulter le code pour cet exemple pour le comprendre plus clairement.

Tout d'abord, nous avons inclus une longue liste de bibliothèques ou de fichiers d'en-tête dont les fonctions seront utilisées dans ce programme C. Ensuite, nous avons défini les fonctions «lire» et «écrire» en utilisant le mot-clé «définir» pour lire et écrire les fichiers de l'appareil de notre système. Après cela, dans notre fonction «Main ()», nous avons défini une variable entière nommée «FileDescriptor."Ce descripteur de fichier sera utilisé pour vérifier si notre fichier de périphérique a été ouvert efficacement ou non. Ensuite, nous avons défini deux autres variables de type int32_t nommées «Val» et «num."Ces variables prendront les entrées de l'utilisateur lors de l'exécution et afficheront la sortie correspondante.

Après cela, nous avons imprimé un message pour indiquer que notre programme tente d'ouvrir le fichier de périphérique. Ensuite, en utilisant la fonction «ouverte», nous avons tenté d'ouvrir le fichier de périphérique souhaité en fournissant son chemin correct, je.e., Le répertoire «/ dev» suivi du nom du fichier de périphérique souhaité. Après cela, nous voulions vérifier si le fichier était ouvert avec succès ou non. Pour ce faire, nous devons valider la valeur de la variable «FiledEscriptor». Supposons que cette valeur soit inférieure à «0». Dans ce cas, un message d'erreur sera imprimé sur le terminal indiquant que le fichier de périphérique spécifié n'a pas pu être ouvert en raison d'une erreur, et le programme se terminera immédiatement.

Sinon, si le fichier de périphérique est ouvert avec succès, un message sera imprimé sur le terminal demandant à l'utilisateur de saisir la valeur qu'il souhaite écrire dans le fichier de périphérique spécifié. Ensuite, l'entrée utilisateur donnée sera enregistrée dans la variable «num». Après cela, un message sera imprimé sur le terminal pour indiquer que le numéro passé a été écrit dans le fichier de périphérique spécifié, suivi de la fonction «IOCTL» qui effectuera cette action. Ensuite, nous voulons lire la valeur à partir du même fichier pour lequel nous avons imprimé un message sur le terminal, puis utilisez à nouveau la fonction «IOCTL» pour lire la valeur de ce fichier dans la variable «Val».

Après cela, nous avons imprimé la valeur de la variable «Val» sur le terminal, qui est la valeur lue à partir du fichier de périphérique spécifié. Ensuite, nous avons publié un message sur le terminal pour transmettre la fermeture du fichier de périphérique. Ce message est suivi de la fonction «fermeture» utilisée pour modifier la valeur de la variable «FiledEscriptor» afin que le fichier de périphérique en discussion puisse être fermé en toute sécurité. Enfin, nous avons utilisé la déclaration «Return 0» comme dernière déclaration de notre programme C.

Maintenant, il est temps de compiler ce programme C pour voir des erreurs. Pour cela, nous avons utilisé la commande apposée:

$ gcc ioctl.c -o ioctl

Pour exécuter ce code C compilé, nous avons utilisé la commande illustrée ci-dessous:

$ ./ ioctl

Une fois que nous avons exécuté ce script C, on nous a demandé de saisir la valeur que nous voulions envoyer au fichier de périphérique. Nous avons entré le numéro «3» comme indiqué dans l'image suivante:

Dès que nous avons fourni cette valeur au terminal, il a été immédiatement écrit sur notre fichier de périphérique. Une nouvelle valeur a été lue à partir de ce fichier et affichée sur le terminal, comme indiqué dans l'image ci-dessous. Vous pouvez également consulter les messages successifs imprimés sur le terminal comme sortie de ce programme C.

Erreurs communes alliées à la fonction IOCTL en C:

Les trois erreurs les plus courantes associées à la fonction «IOCTL» sont les suivantes:

  • EBADF: Le descripteur de fichier n'est pas valide.
  • Efault: Refusé l'accès à la mémoire non valide.
  • Einval: La demande n'est pas valide.

Conclusion:

Cet article tournait autour de discuter de la fonction «IOCTL» du langage de programmation C. Nous avons indiqué l'objectif détaillé de cette fonction et le type de fichier que cette fonction traite généralement. Ensuite, nous avons partagé un exemple approfondi pour démontrer l'utilisation de cette fonction, suivie de certaines erreurs associées à cette fonction. J'espère qu'après avoir parcouru ce guide, vous comprendrez le fonctionnement de la fonction «IOCTL» du langage de programmation C.