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

open()中的整数文件描述符“ 0”,第1张

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。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5630316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存