1635_fileno的简单使用
创始人
2024-06-01 06:27:46

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

         在看MIT的OS课程的时候发现自己动不动就因为只是的缺少而卡住,而这个学习占据了我工作之余很多的时间。现在都有一点觉得通关不了的感觉了,缺乏的知识实在是多。不过,反正时光漫长不知如何抛,在这其中慢慢熬也算是一种自我修炼了。

         我看到一段这样的代码,一下子把我给卡住了。加上最近这段时间的个人状态欠佳,第一行代码其实是卡了我好几天。对于专门从事UNIX或者LINUX平台的开发人员来说,这或许会笑掉大牙。不过,真的是隔行如隔山,至少他们的行业把我给拦住了。为了弄明白这是在干什么,绝对还是一点点来。先搞清楚fileno的用法以及里面的这个参数的由来。

1. fileno的作用是从标准的输入、输出流中提取出来文件描述符。

2. 关于文件描述符的使用,在传递给可能关闭它的代码之前先试用dup进行复制。这一点,依然没有看懂。但是之前看了一些xv6的书籍,至少是到了dup等概念了。

3. 这个接口运行成功则会返回文件描述符,如果运行失败返回-1。这里提到了一个errorno的概念,再次跳过吧。

4. 这个函数有一个属性,那就是是否线程安全,数值为MT-Safe。

         这个接口符合POSIX.1-2001以及POSIX.1-2008的标准。

         好,这样fileno的功能基本了解了。接下来,看看stdin是一个什么信息。这个虽然猜得出来,但是还是得去求证一下。

1. 看第二份这样的文件,看到这个函数后面带着一个数字,大部分函数都有,这会是什么概念呢?后面再去分析。

2. FILE数据类型是一个_iobuf的结构体封装成的,里面的具体成员信息在此也不做具体的了解了。我大概看了一下,临时决定先跳过。

3. 其实几个标准的IO流在UNIX的角度都是文件。

4. FILE是UNIX文件描述符缓冲包装器。

         这几个标准的输入、输出、错误都是符合C89标准的,而不是POSIX。这个标准还要求软件启动的时候需要默认打开这三个IO流。其中,stderr是不带有缓冲的,stdout则是带有缓冲机制的。因此,这样可能会导致一定的显示异常。

         我在主页上看到了这样的描述,突然间觉得前面的数字疑问有了答案。1应该代表的是用户命令,2则是系统调用,3是库函数,4是设备,5是文件格式,6暂时看着没有,7是概览、约定以及其他,8是超级用户以及系统管理员命令。

         虽然磨了很久,但是感觉终究是可以继续下去了。

         根据上面的知识,应该可以推断出来,其实上面的fileno(stdin)的结果应该是0。

         其实的测试结果也看得出来,这个推测是准确的。

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...