How could I simulate a lack of file descriptor?

2.3k views Asked by At

I would like to provoke a situation where there is no file descriptor remaining.

I have been thinking about 2 possibilities:

  1. Opening thousands of files randomly until the result of open is -1
  2. Set a very low number of file descriptor available (let's say stdin, stdout and stderr).

How would you do it?

1

There are 1 answers

2
Matthew On BEST ANSWER

You can limit the number of file descriptors a process can open under Linux using ulimit.

Executing ulimit -n 3 before running your C program should make it an error to open any more files, since stdin, stdout, and stderr take up the first 3 descriptors.

An example:

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

The shell process itself attempts to open /dev/null to redirect stdout before closing it there, therefore it gets an error. Your C program will be fed the exact same error the first time it calls fopen, open, socket, etc (or anything that allocates a new file descriptor).