每个进程都有一个文件描述符表(FDT),每个文件都有一个文件描述符。 stdin,stdout和stderr的文件描述符分别为0,1和2.这些值对于所有进程都是相同的。我相信FDT包含对这些文件的INODE条目的引用。文件描述符在各个进程中重用,即它们不是全局唯一的。 FDT提到的每个进程都有内核维护的全局FDT吗? stdin,stdout和stderr对应的FDT是什么?链接到键盘这些特殊文件,显示等 请提供链接的文章,书籍等Unix中的文件描述符帮助
6
A
回答
7
一个很好的出发点是自2001年的文章"A small trail through the Linux kernel"的机制仍然是类似的,虽然实现已经在移动和最好在a more recent kernel研究。
在内核中,每个打开的文件描述符对应于一个struct file
,其中包含有关打开的文件或设备的所有信息。文件描述符实际上不过是进程中FDT的索引。在Linux内核中,struct file
通过函数fd_install()
附加到FDT。 struct file
可以通过dup2
system call重新分配给另一个文件描述符。
如果进程是由clone
系统调用与CLONE_FILES
标志创建的,但没有全局FDT,则进程可以共享相同的FDT。正常的fork
操作会创建一个新的FDT,它是父FDT的副本。这样做的实际用途是使多线程应用程序的每个线程成为共享一个公共FDT的克隆进程,确保所有线程都可以使用相同的整数文件描述符。如果使用fork
/exec
创建新进程,则新进程将从相同的文件描述符开始,但可以在不影响父级的情况下打开和关闭文件。
stdin,stdout,stderr的FDT条目是从父级继承的。这三个FDT条目的内核实现没有什么特别之处;它们的含义来自C库的传统使用。父母过程本身决定他们连接到什么。它们可能连接到字符设备,或者它们可能已连接到文件或管道。对于字符设备的情况,最正常的是成为一个tty或pty设备。免费书Linux Device Drivers有a good overview这些。
相关问题
- 1. UNIX文件描述符重用
- 2. 了解Unix文件描述
- 3. WebApi帮助页面描述
- 4. 文件描述符饥饿和阻断文件描述符
- 5. Unix Shell在C - 文件描述符中实现Cat问题
- 6. 如何在unix中创建阻塞文件描述符?
- 7. 文件描述符是在Unix上是其本地进程还是全局文件描述符
- 8. 对UNIX文件描述符的短写操作
- 9. FullCalendar和qTip。帮助描述为数组
- 10. c strcpy文件描述符
- 11. webservice描述符文件
- 12. 关闭文件描述符
- 13. 创建文件描述符
- 14. Linux open()文件描述符
- 15. 实现文件描述符
- 16. 文件描述符轮询
- 17. 写作文件描述符
- 18. Android中的持久文件描述符
- 19. Java(android)中socket.io的文件描述符?
- 20. UNIX守护进程处理文件描述符
- 21. 非阻塞文件描述符Unix网络编程
- 22. 如何使用sdbus发送Unix文件描述符?
- 23. 了解UNIX管道和文件描述符
- 24. 有关文件的Unix帮助
- 25. 套接字描述符与文件描述符
- 26. 文件描述符和套接字文件描述符之间的区别
- 27. 坏文件描述符文件无
- 28. 文件描述符和打开文件
- 29. unix打开文件,用于写入给定的文件描述符
- 30. 等待可读文件描述符和可写文件描述符
在段落3的末尾,我认为你的意思是一个子进程可以打开和关闭文件而不影响父文件 –