全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
一个shell的例程分析了很长时间,里面的基础知识一层嵌套一层。不过,这也是补充基本知识的很好的机会。既然自己日常接触的更多的还是这种通用计算机,那么培养一下这方面的思维习惯还是很有帮助的。这一次,看一下open函数。
1. 从分类看,这个函数其实是一个系统调用接口。
2. 之前学习C语言的时候接触过open这个函数,但是印象中并没有见过fcntl.h的头文件。
3. 这一组函数也是我看到的比较有趣的函数,之前没有什么印象有函数名在一个地方直接做两个不同的声明。
4. 这个函数的主要功能其实是把文件或者设备绑定成为一个文件描述符信息,这个也是unix中比较有趣的哲学思想:一切全都是文件。
这里介绍了几种flags的模式,这种模式其实是很容易理解的,也是我很熟悉的。不过,我熟悉这样的操作倒不是因为C语言或者unix,而是因为我多年来一直采用脚本处理文本文件。
1. 我所接触的shell实现中,接下来会用到的一个参数就是这里,其实是一个mode的概念。或许,早期的UNIX中flags以及mode还是有一定的组合度的。
2. OTH结尾的几个,是用于指定others的权限的。而OTH这三个字母其实是对应单词的一个缩写。
操作处理有时候是限定于目录处理的,这个可能会有一点让人迷惑,但是只要回到前面的大概前提概念就容易理解了:UNIX中一切全是文件!
这里的creat(不知道为什么不把后面的e写上),其实是一个多种flags组合的open的等效方式。这么看来,兴许我大概率暂时是用不上了。
很多时候我有些弄不清库函数和系统调用的关系,两者似乎独立但是从依赖关系来说似乎又应该是统一的。既然能够统一,那么设计一套全新的库函数的意义又是什么?
或许,随着对OS设计更加深入的认识之后,这样的问题会有答案。
与这个open经常配合使用的还有一个close,比较简单,就是关闭文件描述符。这个就不单独进行梳理了。