I am trying to get the whole picture with file descriptors. Say I have process1 which initially has these file descriptors:
_process1_ | | | 0 stdin | | 1 stdout | | 2 stderr | |__________|
What really happens when, in the process, we call this function (in C):
The file descriptor 1 translates to the stdout FILE structure in the kernel's Open Files Table.
With the code above the file descriptor 1 gets deleted from the process's table which becomes:
_process1_ | | | 0 stdin | | 2 stderr | |__________|
But what happens in the kernel? Does the
stdout FILE structure get deallocated? How is that possible if stdout is a special file (the monitor) and probably being used by other processes? What about FILE structures that are just normal files (.txt for example)? What if such a file is being used by an other process?