What is a “file descriptor”, really?

People say “in UNIX, everything is a file”. And that we interact with the operating system through “file descriptors”.

I don’t find this very enlightening. All it means is that the word “file” is overloaded to mean “some sort of resource”. Here are things that a file descriptor can represent:

Depending on how you got your “file descriptor”, the operations you can do on it are different. There is no universal API for interacting with a “file descriptor”. For example, if you call kqueue() to get a new kernel queue, you should not perform a write operation on it. Just because it’s a “file descriptor”, it doesn’t mean you can write to it like that. It’s a kernel queue, which is completely different from a file.

“File descriptor” should be renamed “resource descriptor”.

Tagged #c, #posix, #programming.

Similar posts

More by Jim

Want to build a fantastic product using LLMs? I work at Granola where we're building the future IDE for knowledge work. Come and work with us! Read more or get in touch!

This page copyright James Fisher 2016. Content is not associated with my employer. Found an error? Edit this page.