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

关闭它们后重新打开stdout和stdin文件描述符

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

关闭它们后重新打开stdout和stdin文件描述符

您应该使用dup()和dup2()来克隆文件描述符。

int stdin_copy = dup(0);int stdout_copy = dup(1);close(0);close(1);int file1 = open(...);int file2 = open(...);< do your work. file1 and file2 must be 0 and 1, because open always returns lowest unused fd >close(file1);close(file2);dup2(stdin_copy, 0);dup2(stdout_copy, 1);close(stdin_copy);close(stdout_copy);

但是,您可能要小心一点细节(来自man dup):

这两个描述符不共享文件描述符标志(close-on-execflag)。重复描述符的执行关闭标志(FD_CLOEXEC;请参阅fcntl(2))关闭。

如果这是一个问题,则可能必须还原close-on-exec标志,可能使用dup3()而不是dup2()以避免竞争情况。

另外,请注意,如果您的程序是多线程的,则其他线程可能会意外地向重新映射的stdin / stdout写入/读取。



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

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

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