加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么在UNIX中只分配最低可用文件描述符?

发布时间:2020-12-16 01:48:17 所属栏目:安全 来源:网络整理
导读:在小组讨论中,我对这个问题很感兴趣 – 为什么UNIX标准要求保证仅为进程分配最低可用文件描述符? 只有我能想到的可能的答案是可扩展性.由于我们总是选择最少的可用描述符,因此描述符位图的使用部分大部分是密集的,因此数组的增长较慢. 我只是想知道是否还有
在小组讨论中,我对这个问题很感兴趣 –

为什么UNIX标准要求保证仅为进程分配最低可用文件描述符?

只有我能想到的可能的答案是可扩展性.由于我们总是选择最少的可用描述符,因此描述符位图的使用部分大部分是密集的,因此数组的增长较慢.

我只是想知道是否还有其他原因我不知道.

另外,如果我们知道给定的描述符比另一个描述符更大/更小,我们是否有一些场景可以得出逻辑结论(我们可以在程序中使用的那些结论).我的理解虽然不允许使用这种技术,因为它不保证描述符的年龄.

解决方法

有各种各样的原因,但最终的原因是“因为这是它一直以来的方式”.

>可以轻松跟踪文件描述符列表以查找第一个未使用的文件描述符.
>这是确定的.在dup2()调用可用之前,这很重要.

传统上,进程的文件描述符表是固定大小的,非常小(在第7版Unix,IIRC中为20).

确定性机制对于shell中的I / O重定向至关重要.例如:

cat file1 file2 > file3

shell需要将标准输出重定向到file3.因此,它可以使用:

close(1);  // Standard output
if (open("file3",O_WRONLY|O_CREAT,0666) != 1)
   …error creating file…

并且它会知道因为标准输入已经打开(文件描述符0),open()将返回文件描述符1.

现在,您无法从文件描述符值中推断出任何东西.我可以写:

int fd1 = open(filename,flags,mode);
int fd2 = dup2(fd1,1024);
close(fd1);

并且fd2(应该)包含1024的事实并没有告诉你与文件描述符3相比打开它的顺序(可能下一次open()调用可能会返回).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读