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。

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

相关内容

热门资讯

投资者提问:董秘你好,请问公司... 投资者提问:董秘你好,请问公司有脑机工程相关的产品或布局吗?董秘回答(复星医药SH600196):投...
投资者提问:公司积极开拓海外市... 投资者提问:公司积极开拓海外市场,请问近两年是否出口欧盟国家?董秘回答(南芯科技SH688484):...
投资者提问:公司走成这样,管理... 投资者提问:公司走成这样,管理层怎么办董秘回答(南芯科技SH688484):您好,谢谢投资者对公司的...
过敏预警、旅游规划……天气预报... (来源:中国妇女网)转自:中国妇女网1月初,气象预报显示,天津市将接连出现两次弱冷空气过程。同时,天...
古蜀人是华夏子孙吗?由三星堆看... (来源:上观新闻)《英雄祖先与弟兄民族》是历史人类学家王明珂的“华夏边缘”系列研究之一,是《华夏边缘...