栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

open()中的整数文件描述符“ 0”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

open()中的整数文件描述符“ 0”

没有文件描述符(FD)号是特殊的。FD 0上的stdin,FD 1上的stdout和FD 2上的stderr只是一个约定。

登录时,关联的终端设备将“连接”到这些FD。运行命令时,除非您指示Shell进行重定向,否则它会继承描述符。但是,一旦该程序启动后,可以

close
dup
或者
open
文件描述符,只要你喜欢。

回到您的问题:

stdout = open(0, "w")stdout.write("Hello World") # Prints Hello Worldstdout.close()

尽管有名称,

open
在这种情况下不会打开任何内容。它从一个已经打开的低级FD创建一个Python文件对象(带有缓冲区和所有高级内容),它实际上只是一个数字(内核中打开文件表的索引)。它有一个单独的函数:os.fdopen

更有趣的一点是,没有标准的方法可以将打开模式从读取更改为写入,而您的程序将写入标准输入。答案是(至少在Linux上)这根本没有发生。如您所见

lsof
,所有3个标准FD都通常以读/写模式打开(以标记结尾
u
),例如:

cmd 32154用户0u CHR 136,7 0t0 10 / dev / pts / 7cmd 32154用户1u CHR 136,7 0t0 10 / dev / pts / 7cmd 32154用户2u CHR 136,7 0t0 10 / dev / pts / 7

因此,您的程序只需写入连接到终端的FD 0。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624280.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号