gpt4 book ai didi

c - 文件描述符表和系统调用

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:12 27 4
gpt4 key购买 nike

我一直在阅读文件描述符以及操作系统如何管理文件并使用 C 系统调用“open()”为进程提供对它们的访问,我有几个问题:

  • 文件描述符表:它只是所有进程共享的一个大数据结构吗(比如,假设有两个进程:进程 A 和进程 B,它们是否有指向操作系统文件描述符表的指针),或者操作系统为每个进程创建一个全新的文件描述符数组?
  • 还有哪些其他编程语言可以调用系统调用?例如,我知道使用 C/C++ 可以轻松地使用操作系统接口(interface)调用系统调用(fork()、close()、open()、execl()...等等),但是 Java 呢?我不记得有调用这些函数的方法。它在那里究竟是如何工作的? JVM 只是将我的代码(需要翻译的内容)翻译成上述系统调用吗?那么其他高级编程语言(如 Python)呢?
  • 如果我在使用系统调用 close() 打开文件后不关闭文件,会有什么危害?

谢谢。

最佳答案

  1. 有一个系统范围的打开文件描述表,还有一个每个进程的打开文件描述符表。每个打开的文件描述符都引用一个打开的文件描述(参见 open()close() ),但多个描述符可能引用相同的描述(想想 dup()dup2()fork())。

  2. 任何语言都可以通过调用实际进行系统调用的适当汇编器来调用系统调用。大多数脚本语言构建在 C 或 C++ 之上,因此它们不算数,但其他语言(例如 Fortran、Ada、D 或 Go)可以以适合其语义的方式提供对系统调用的访问.

  3. 您打开了一个不需要打开的文件描述符,因此您可以同时打开更少的其他文件。如果你的程序很短并且不会耗尽资源,你可以忽略关闭它。关闭文件有助于确保数据写入磁盘;操作系统内核知道,如果您的程序是打开文件的唯一进程并且您关闭了文件,则不再需要其缓冲区缓存中的任何磁盘 block 。

关于c - 文件描述符表和系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com