为什么UNIX文件描述符没有被自己的类型实现,特别是在C中?
我最近一直在使用大量的文件描述符,我一直在想,为什么它们被实现为整数?
这意味着它们容易混淆其他整数,并且没有方法知道没有上下文,它们是什么,他们指出,它们是否被打开等等。 在C中,FILE是不透明的结构类型。许多人也typedef例如status_t作为一个整数,所以它们的功能是显而易见的。似乎最好的办法是将它们实现为不透明类型,或者(例如在C中)作为可以照顾一些实现的类,并且还可以清理命名空间(调用pipe()或者open()看??起来是无害的,并且不清楚你在管道上或是没有上下文的情况)。像例如std :: file_descriptor,具有用于创建管道或打开文件等的构造函数/工厂函数。 我希望这是这个网站的主题;我试图把它称为“为什么这个特定的决定?如果有人知道某处会更好,请让我知道。
你的问题可以分为两部分:
为什么POSIX文件描述符为int? 像大多数已经建立的工具和图书馆的东西一样,答案可能是历史原因。 James’ answer点这个。 使文件描述符不透明可能是一个好主意,但不是因为你提到的原因。使类型不透明对于根据一些参数使用不同的类型是好的。例如,在某些系统上,您可能需要长久的文件描述符。然而,似乎发生了这样的事情,没有人能够同时需要20亿个开放文件,因此没有人关心这个不存在的问题。 另一方面,像typedef这样的东西int file_descriptor;不会修复你上面提到的任何问题:
如果你混淆你的变数,我有坏消息给你。由于file_descriptor和int是相同的类型,所以编译器不会帮助你,所以任何操作都是允许的。
您也无法使用FILE。这就是为什么你有函数来查询所寻求的信息并返回它,就像使用FILE一样。打字类型不会给你任何额外的信息。 为什么POSIX没有C包装器? 简而言之,因为除了微软,没有操作系统开发人员爱上了C。 Windows几乎不是POSIX,所以没有希望微软试图改进任何POSIX。符合POSIX标准的其他操作系统具有C API作为事实上的系统编程语言(部分原因是因为n.m. says,几乎所有语言都可以绑定到C)。 事实上,C在应用程序开发人员中很受欢迎,但在系统程序员中却并不如此。 POSIX委员会对C也似乎并不感兴趣。这就是为什么你会看到关于POSIX API的C和C解决方案和参数。还要注意的是,07年,它是用C和其中最重要的后代之一Linux编写的,也是强制绑定到C. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |