 <p>In addition to existing good answer by @Nominal Aminal it is an integer but it points to an entry of a structure in kernel called file descriptor table. That is at least the case with Linux. Of the several fields that are part of that struct, an interesting one is:</p> <pre><code>FILE * pointer; // descriptor to / from reference counts etc. </code></pre> <p>You might be interested in following api's which given one of FILE * or descriptor, return the other</p> <p><a href="http://stackoverflow.com/questions/4210966/c-how-can-i-change-from-file-descriptor-to-file-struct-and-visa-versa">How to obtain FILE * from fd and vice versa</a></p>