L'obtention de la plus haute attribuée descripteur de fichier

Est là de façon portable (POSIX) pour obtenir la plus haute attribuée descripteur de fichier numéro du processus en cours?

Je sais qu'il y a une belle manière de faire le nombre sur AIX, par exemple, mais je suis à la recherche d'un portable de la méthode.

La raison pour laquelle je te demande, c'est que je veux fermer tous les descripteurs de fichiers ouverts. Mon programme est un serveur qui s'exécute en tant que root et les fourches et les execs enfant de programmes pour les utilisateurs non-root. Laissant le privilège des descripteurs de fichiers ouverts dans le processus de l'enfant est un problème de sécurité. Certains descripteurs de fichier peut être ouvert que par le code je ne peux pas le contrôle (la bibliothèque C, des bibliothèques tierces, etc.), je ne peux donc pas compter sur FD_CLOEXEC soit.

  • Notez qu'il serait préférable de simplement ouvrir tous vos fichiers avec le close-on-exec indicateur est défini de sorte qu'ils sont automatiquement fermé par un de la exec-les fonctions de la famille.
  • Moderne glibc prend en charge le "e" stdio.h FICHIER* indicateur d'ouverture de caractères pour indiquer FD_CLOEXEC traitement.
  • Également intéressant de noter que close-on-exec n'est pas close-sur-fourche. Si vous avez une fourche non privilégié processus enfant pour exécuter un sous-programme à partir du même programme, le processus enfant d'hériter les descripteurs de fichier de l'privilégié des parents. Il n'est pas trivial de rappeler à proximité de tous ceux que vous n'avez pas besoin. Close-on-exec n'aide pas dans cette situation.