Shell开发项目:如何获取三个保留文件描述符的名称?
解决Shell保留文件描述符名称获取问题
首先明确:没有标准系统调用或库函数能直接返回0/1/2对应的标准流名称,因为这三个文件描述符的映射是POSIX标准强制约定的,系统层面不会提供动态查询接口。
可行的实现方案:
直接硬编码映射表
既然是标准约定,在代码里建立固定关联是最可靠的做法,比如用结构体数组存储:// C语言示例代码片段 typedef struct { int fd; const char* name; const char* mode; } OpenFileEntry; OpenFileEntry reserved_entries[] = { {0, "stdin", "r"}, {1, "stdout", "w"}, {2, "stderr", "w"} };初始化你的已打开文件列表时,直接遍历这个数组插入条目即可。
可选的验证逻辑(非必须)
如果需要确认这些fd确实对应标准流,可以用fstat()检查文件类型(比如是否为字符设备,对应终端),但这只能做验证,无法获取名称。
补充说明:
所有POSIX兼容系统都严格遵循0=标准输入、1=标准输出、2=标准错误的约定,硬编码是行业通用实现方式,完全符合规范,不需要动态查询。
内容的提问来源于stack exchange,提问作者jamondebellota
相关产品推荐
相关产品推荐

