File descriptors are numbers from a table of all open files for a given program pointing in turn to all the open files running on the entire operating system.
The following standard file descriptors are reserved universally to represent the three main data streams:
Limited Number Of
The Linux kernel can only allocate so many file descriptors. On most systems you can check this by looking at this
cat /proc/sys/fs/file-max 1611043
If you run out of file descriptors — by opening a lot of files and not closing them — you end up with a messed up system that will likely crash.