For faster navigation, this Iframe is preloading the Wikiwand page for Descripteur de fichier.

Descripteur de fichier

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (novembre 2013). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?
Les descripteurs de fichier pour l'entrée, la sortie, et les erreurs

En informatique, un descripteur de fichier (file descriptor en anglais) est une clé abstraite pour accéder à un fichier (c'est un entier).

On utilise généralement ce terme pour les systèmes d'exploitation POSIX.

Dans la terminologie de Microsoft Windows et dans le contexte de la bibliothèque stdio.h, on préfère le terme filehandle, bien que ce soit techniquement un objet différent (voir infra).

Explications

[modifier | modifier le code]

Dans POSIX, un descripteur de fichier est un entier, et plus spécifiquement dans le langage C, un entier de type int.

Il y a trois descripteurs de fichier POSIX standard pour tout processus qui n'est pas un daemon :

Nombre entier Nom Constante (unistd.h) Flux
0 Entrée standard STDIN_FILENO stdin
1 Sortie standard STDOUT_FILENO stdout
2 Erreur standard STDERR_FILENO stderr

Généralement, un descripteur de fichier est un index d'une entrée dans le noyau-résident, structure de données contenant les détails de tous les fichiers ouverts.

Dans POSIX, on appelle cette structure de données une table de descripteurs de fichier. Et chaque processus a sa propre table de descripteurs de fichier. L'application utilisateur passe la clé abstraite au noyau par un appel système et le noyau accèdera au fichier grâce à cette clé. L'application ne peut pas lire ou écrire directement dans la table des descripteurs de fichier.

Dans un système Unix, les descripteurs de fichier peuvent désigner des fichiers, des répertoires, des devices bloc ou caractère (souvent appelés fichiers spéciaux), des pipes nommés ou des pipes anonymes.

Le filehandle FILE * de la bibliothèque C d'entrées/sorties standard est techniquement un pointeur vers une structure de données gérées par les routines de cette bibliothèque. Sur les systèmes Unix, l'une de ces structures inclut un descripteur de fichier pour l'objet en question. Puisque le nom de file handle se réfère à cette couche additionnelle, il n'est pas interchangeable avec celui de descripteur de fichier.

Pour compliquer encore la terminologie, Microsoft Windows utilise aussi le terme file handle pour désigner la construction de bas niveau, c'est-à-dire les descripteurs de fichier POSIX. Les bibliothèques C Microsoft fournissent aussi des fonctions de compatibilité qui « encapsulent » ces handles natifs pour supporter des conventions « à la POSIX » de descripteurs de fichier comme décrits ci-dessus.

Opérations sur les descripteurs de fichier

[modifier | modifier le code]

Un Unix moderne fournit typiquement les opérations suivantes sur les descripteurs de fichier.

Appels système de création de descripteurs de fichier
  • open(), open64(), creat(), creat64()
  • socket()
  • socketpair()
  • pipe()
Opérations sur un seul descripteur de fichier
  • read(), write()
  • recv(), send()
  • recvmsg(), sendmsg() (permet d'envoyer des descripteurs de fichier à un autre processus)
  • sendfile()
  • lseek(), lseek64()
  • fstat(), fstat64()
  • fchmod()
  • fchown()
Opérations sur de multiples descripteurs de fichier
  • select(), pselect()
  • poll()
Opérations sur la table des descripteurs de fichier
  • close(descripteur)
  • dup(descripteur)
  • dup2()
  • fcntl (F_DUPFD)
  • fcntl (F_GETFD and F_SETFD)
Opérations qui modifient l'état du processus
  • fchdir(): change le répertoire de travail courant du processus appelant fourni sous forme de descripteur de fichier
  • mmap(): projette des portions d'un fichier dans l'espace d'adresse du processus
Verrouillage de fichier
  • flock()
  • fcntl (F_GETLK, F_SETLK and F_SETLKW)
  • lockf()
Sockets
  • connect()
  • bind()
  • listen()
  • accept() : crée un nouveau descripteur de fichier lors d'une connexion entrante
  • getsockname()
  • getpeername()
  • getsockopt(), setsockopt()
  • shutdown() : ferme un ou les deux bouts d'une connexion full duplex
Divers
  • ioctl(): une large collection d'opérations diverses sur un seul descripteur de fichier, souvent associé avec un device

Descripteurs de fichier et capacité

[modifier | modifier le code]

Les descripteurs de fichier Unix sont des capacités. Ils peuvent être passés entre des processus à des sockets du domaine UNIX avec l'appel système sendmsg().

Une table de descripteurs de fichier Unix est un exemple de C-list.

Sur les autres projets Wikimedia :

{{bottomLinkPreText}} {{bottomLinkText}}
Descripteur de fichier
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?