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

         全部学习汇总: 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。

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

相关内容

热门资讯

北方长龙跌2.00%,成交额6... 7月9日,北方长龙盘中下跌2.00%,截至09:35,报83.17元/股,成交6764.12万元,换...
恒而达涨2.04%,成交额60... 7月9日,恒而达盘中上涨2.04%,截至09:36,报48.44元/股,成交6019.87万元,换手...
A100ETF易方达(1596... 7月9日,A100ETF易方达(159686)开盘涨0.19%,报1.055元。A100ETF易方达...
特发信息跌2.12%,成交额9... 7月9日,特发信息(维权)盘中下跌2.12%,截至09:36,报7.86元/股,成交9507.33万...
央企科技ETF(560170)... 7月9日,央企科技ETF(560170)开盘涨0.00%,报0.882元。央企科技ETF(56017...
泰祥股份涨2.04%,成交额8... 7月9日,泰祥股份盘中上涨2.04%,截至09:36,报26.06元/股,成交870.52万元,换手...
东华测试涨2.05%,成交额2... 7月9日,东华测试(维权)盘中上涨2.05%,截至09:36,报38.34元/股,成交2227.04...
金诚信涨2.06%,成交额2.... 7月9日,金诚信盘中上涨2.06%,截至09:36,报47.15元/股,成交2.65亿元,换手率0....
科创100ETF易方达(588... 7月9日,科创100ETF易方达(588210)开盘跌0.10%,报0.997元。科创100ETF易...
创业板综ETF华夏(15956... 7月9日,创业板综ETF华夏(159563)开盘涨0.22%,报1.389元。创业板综ETF华夏(1...