如果2个文件描述符被重复到同一个文件(即506
和STDOUT
),是否会调用close(506)
清除两者关联的对象并使STDOUT
无法使用?或者内核是否为其文件实现引用计数?
答案 0 :(得分:8)
内核实现引用计数,因此在指向它的所有文件句柄都关闭之前,内核对象不会关闭。
答案 1 :(得分:5)
内核中广泛使用引用计数器,以避免由于并发分配和释放资源而导致的竞争条件。引用计数器只是与特定资源(例如存储器页面,模块或文件)相关联的atomic_t计数器。当内核控制路径开始使用资源时,计数器会原子地增加,当内核控制路径完成使用资源时,计数器会减少。当引用计数器变为零时,资源未被使用,并且可以在必要时释放它。
如果您想通过this查看Linux内核引用计数实现的概述,您可能会看到这一点。