gpt4 book ai didi

linux - 是否有可能 linux 文件描述符 0 1 2 不适用于 stdin、stdout 和 stderr?

转载 作者:IT王子 更新时间:2023-10-29 00:11:00 25 4
gpt4 key购买 nike

当程序开始时,它是否默认为 stdin、stdout 和 stderr 使用文件描述符 0、1 和 2?并且 API 调用(例如 open(...)、socket(...) 不会返回 0、1 和 2,因为这些值已经被采用了吗? open(...) 或 socket(...) 是否会返回 0、1 或 2。而 0、1 和 2 与 stdin、stdout 和 stderr 无关。

最佳答案

file descriptor level,stdin定义为文件描述符0stdout定义为文件描述符1stderr 被定义为文件描述符 2。参见 this .

即使您的程序或 shell 更改(例如,使用 dup2(2) 重定向)什么是文件描述符 0,它始终保持 stdin(因为根据定义 STDIN_FILENO为 0)。

所以 stdin 当然可以是管道、套接字或文件(​​不是终端)。您可以使用 isatty(3) 进行测试如果是 tty,和/或使用 fstat(2)获取有关它的状态信息。

类似open(2) 的系统调用或 pipe(2)socket(2)可能会给例如STDIN_FILENO(即 0)如果该文件描述符是空闲的(例如因为它之前是 close(2) -d)。但当发生这种情况时,根据定义它仍然是 stdin

当然,在stdio(3) , FILEstdin有点复杂。你的程序可以 fclose(3) , freopen(3) , fdopen(3) ...

可能是内核在神奇地启动 /sbin 时将 stdinstdoutstderr 文件描述符设置到控制台/init 作为第一个进程。

关于linux - 是否有可能 linux 文件描述符 0 1 2 不适用于 stdin、stdout 和 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com