文件描述符和进程关系

File descriptor and process relation

文件描述符是相对于进程还是相对于操作系统?我基本上想知道的是,如果在 c 程序中我打开一个文件并且该文件被分配了一个文件描述符值,比如 103,那么当我在其他一些 c 程序中打开一个文件描述符为 103 的文件时,我指的是同一个文件还是其他文件?

每个进程都有自己的文件描述符table。它特定于处理器,如果您更改 fd 它将仅对该进程有效,它不会影响系统中的其他进程。一旦进程终止,fd 将被丢弃。

What if I fork a new process from the process I opened that file?

当前文件描述table即fork系统调用前的table将继承给子进程

文件描述符是通过 open() 创建的特定进程。但是您可以使用 open() 由其他进程多次打开同一个文件。通过这种方式,每个进程都将拥有自己的同一个文件的文件描述符。文件描述符和其他资源通过 fork 传递给子进程 process.That 意味着子进程不需要重新打开父进程已经打开的同一个文件。