Comment pourrais-je simuler un manque de descripteur de fichier?

Je voudrais provoquer une situation où il ne rest aucun descripteur de fichier.

J’ai réfléchi à 2 possibilités:

  1. Ouverture de milliers de fichiers de manière aléatoire jusqu’à ce que le résultat de l’ouverture soit -1
  2. Définissez un très petit nombre de descripteurs de fichiers disponibles (disons stdin, stdout et stderr).

Comment le feriez-vous?

Vous pouvez limiter le nombre de descripteurs de fichiers qu’un processus peut ouvrir sous Linux en utilisant ulimit.

L’exécution d’ ulimit -n 3 avant d’exécuter votre programme C devrait ulimit -n 3 une erreur d’ouverture de tous les fichiers, puisque stdin, stdout et stderr utilisent les 3 premiers descripteurs.

Un exemple:

 $ ulimit -n 3 $ echo > /dev/null zsh: too many open files: /dev/null 

Le processus shell lui-même tente d’ouvrir / dev / null pour redirect stdout avant de le fermer, ce qui entraîne une erreur. Votre programme C recevra exactement la même erreur la première fois qu’il appelle fopen , open , socket , etc. (ou tout autre élément qui alloue un nouveau descripteur de fichier).