全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
没想到分析一个函数的实现会这么麻烦,中间利用的一系列的库函数以及内核接口我全都不熟悉。但是,这次的这个函数应该是之前C语言的基本教程中存在的,只是我这么多年来一直做嵌入式软件的开发可能这方面不敏感,看到类似的功能章节会直接跳过。
1. 这一个函数跟之前看到的函数的分类都不相同,是一个3p的分类。但是应该是一个库函数的大概分类是错不了的。
2. 这一份文档的风格跟之前看到的几份linux的接口文档的风格不是很相同,开篇还专门写了POSIX接口。其实,到了最后一页这个谜题也就随之解开了。
3. 我其实是查找的Linux的接口文档,其实这个网站也是Linux的网站。但是,这里还是说了这个接口在linux上的实现可能跟这里的描述不同。其实最主要的原因还是最后说的文档由来方式决定的。
4. 这个函数的功能是根据一个数据流获取一个字符串,而这个字符串的获取结束有几种条件,比如说到了指定的字节数或者换行符亦或者是文件的结束。他的返回值可能是字符串也可能是NULL。如果,没有到结束符,那么 会读取n-1个字节。如果是读取到了文件的末尾,那么返回值会是NULL。
5. 这个接口在设计的时候是符合标准C的规范的。
6. 文件的属性中,有一个最后访问时间时间戳的属性。这个接口会改变文件的这个属性信息,这里也给出来了可能改变这个属性信息的其他接口。
1. 这个文档的风格跟前面看到的几个接口的文档风格的确是不同,里面的内容详实程度要好很多。
2. 这里提到了一个只是概念:一行所能够允许的最多的字符数是16384个,这个是linux定义的一个最大限制。
3. 示范代码的意图很容易理解,但是这里涉及到了一个新的接口我是不熟悉的。不过,从中可以看得出来代码设计的严谨性。先前我接触过的软件设计看起来路子比较粗犷,在细节上没有考虑这么多安全等方面的因素。后续可以在我的工作领域一起参考学习一下。
这一个给出来了这个文档的由来,从这里看这个接口的确是有着很浓厚的unix文化基因。
这样,结合这一次的接口分析以及之前看到的其他的接口内容就很容易理解上面的这个函数的设计了。上面的这个函数的设计其实是从标准输入读取一个字符串,最多读取nbuf-1个字符。读取之后的内容,自然可以通过传入的指针来进行访问处理。如果这个函数返回值是-1,那么代表处理的过程中出错了。如果处理的过程没有任何问题,那么返回0。