> 文章列表 > 1651_MIT 6.828 dup函数的简单梳理

1651_MIT 6.828 dup函数的简单梳理

1651_MIT 6.828 dup函数的简单梳理

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         Shell例程其实是一个很好的文件处理概念梳理的例程,里面涉及到了一些最基本的文件操作的理念。前面看了文件的打开关闭,这一次看一个文件描述符的复制处理接口dup。

1. 这个借口还是一个系统调用的类型。

2. 基本的功能方面,dup实现的是根据输入的文件描述符打开一个文件描述符。但是这个新打开的文件描述符与输入的文件描述符引用的是同一个文件。

3. 两个文件描述符共享文件操作的偏移量信息。但是这两个文件描述符并不共享文件操作open中的哪些flags。也就是说,读写模式等操作属性是不共享的。

4. dup2的功能在dup的基础上多了一个可以指定文件描述符数值的功能,而一般的文件描述符的分配规则则是采用当前没有使用的最小数值。

1. 多了一个指定参数的dup2,如果在输入的oldfd无效的时候会报错,但是指定新打开的文件描述符并不会关闭。如果oldfd与newfd相等,那么这个接口什么也不做。

2. dup3相比于dup2多了一个执行的时候可以强制关闭的功能,而这个也是linux系统专有的一个接口。

         如果newfd是打开的,那么在close(2)时报告的任何错误都将丢失。如果这是值得关注的,那么除非程序是单线程的,并且不在信号处理程序中分配文件描述符,否则正确的方法是在调用dup2()之前不要关闭newfd,因为上面描述了竞争条件。这个意思是说,如果dup2调用了,可能会导致一些故障的信息丢失。这种情况下,有一个基本的处理机制可以作为参考。

         看了这一组接口,感觉之前unix的接口还是很精简的。近段时间看到了网络信息说Ken老爷子80岁了,电脑系统从MAC转向了Linux,是树莓派的操作系统。我看到了网络上很多人争论说树莓派没有太强的算力之类的,但是我觉得老爷子大概率是用了一个树莓派的桌面debian而不是说直接用了树莓派。我很好奇老爷子现在用debian会有什么感受,而且我今晚上看了一下树莓派的网站上这个系统的推荐下载,依然是32bit。或许,老爷子真的是我辈俗人应该一直瞻仰学习的,这样的配置设计或许就是足够他处理自己想用计算机处理的一切了吧!