为什么UNIX文件描述符没有被自己的类型实现,特别是在C中?

我最近一直在使用大量的文件描述符,我一直在想,为什么它们被实现为整数?

这意味着它们容易混淆其他整数,并且没有方法知道没有上下文,它们是什么,他们指出,它们是否被打开等等。

在C中,FILE是不透明的结构类型。许多人也typedef例如status_t作为一个整数,所以它们的功能是显而易见的。似乎最好的办法是将它们实现为不透明类型,或者(例如在C中)作为可以照顾一些实现的类,并且还可以清理命名空间(调用pipe()或者open()看​​起来是无害的,并且不清楚你在管道上或是没有上下文的情况)。像例如std :: file_descriptor,具有用于创建管道或打开文件等的构造函数/工厂函数

我希望这是这个网站的主题;我试图把它称为“为什么这个特定的决定?如果有人知道某处会更好,请让我知道。

你的问题可以分为两部分:

为什么POSIX文件描述符为int?

像大多数已经建立的工具和图书馆的东西一样,答案可能是历史原因。 James’ answer点这个。

使文件描述符不透明可能是一个好主意,但不是因为你提到的原因。使类型不透明对于根据一些参数使用不同的类型是好的。例如,在某些系统上,您可能需要长久的文件描述符。然而,似乎发生了这样的事情,没有人能够同时需要20亿个开放文件,因此没有人关心这个不存在的问题。

另一方面,像typedef这样的东西int file_descriptor;不会修复你上面提到的任何问题:

It means that they’re easy to confuse for other integers…

如果你混淆你的变数,我有坏消息给你。由于file_descriptor和int是相同的类型,所以编译器不会帮助你,所以任何操作都是允许的。

… and there’s no way of kNowing without context what they are,what they point to,whether they’re open,etc.

您也无法使用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.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...