免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6327 | 回复: 9
打印 上一主题 下一主题

[C] linux环境下关闭了标准输入输出和错误以后怎么重新打开!!【已经解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-23 14:10 |只看该作者 |倒序浏览
想问一下再关闭了标准输入输出和出错的文件描述符以后怎么才能重新打开呢!!?
还有就是在将0~65535的描述符全部关闭了以后还能重新打开0,1,2三个描述符吗??

通过二楼大哥的方法解决了问题了,
我自己编了一下代码试了一下:
int main()
{
    char *buf = "hello";
    int len = strlen(buf);
    close(1);
    freopen("/dev/tty","w",stdout);
    write(1,buf,len+1);
}


但是三楼版主的意见还是不能体会啊
能不能给个open的例子啊!!!
用open函数怎么替换下面的这行代码呢?
freopen("/dev/tty","w",stdout);


根据future0906的提示 我试着改成下面的代码 成功了!!

open("/dev/pts/0",O_WRONLY);


原来/dev/stdout 是指向/proc/self/fd/1 的连接,而/proc/self/fd/1有指向了/dev/pts/0

太感谢各位了 尤其是二楼的zhuhefang2006 和future0906的帮助!!!

[ 本帖最后由 renfeide112 于 2009-2-23 16:26 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-23 14:13 |只看该作者
fclose(stdout);
......
freopen("/dev/tty", "w", stdout);

论坛徽章:
0
3 [报告]
发表于 2009-02-23 14:19 |只看该作者
似乎 /dev/stdin /dev/stdout /dev/stderr 这三个文件挺不错。

论坛徽章:
0
4 [报告]
发表于 2009-02-23 14:45 |只看该作者

回复 #3 langue 的帖子

能不能给个 比较形象的例子啊 !!!

论坛徽章:
0
5 [报告]
发表于 2009-02-23 14:52 |只看该作者
直接open就可以啦

论坛徽章:
0
6 [报告]
发表于 2009-02-23 14:54 |只看该作者
为什么你能理解/dev/tty

不能理解/dev/stdout 呢?

论坛徽章:
0
7 [报告]
发表于 2009-02-23 14:57 |只看该作者

回复 #6 future0906 的帖子

不好意思
我只是照着做的 其实没有 太理解
实在不好意思啊!!

论坛徽章:
0
8 [报告]
发表于 2009-02-23 15:03 |只看该作者
原帖由 renfeide112 于 2009-2-23 14:45 发表
能不能给个 比较形象的例子啊 !!!


Everything is file 的表现。你需要什么形象的例子?

论坛徽章:
0
9 [报告]
发表于 2009-02-23 15:08 |只看该作者

回复 #8 future0906 的帖子

像这样的行吗??
freopen("/dev/tty", "w", stdout);
因为open好像是有返回值的,
fd=open("/dev/stdout",O_WRONLY,0600)
这样可以吗
主要是对于设备文件的标志位该怎么设置呢?
我试了几次 都不成功啊!!

[ 本帖最后由 renfeide112 于 2009-2-23 15:47 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-02-23 15:56 |只看该作者
原帖由 renfeide112 于 2009-2-23 15:08 发表
像这样的行吗??
freopen("/dev/tty", "w", stdout);
因为open好像是有返回值的,
fd=open("/dev/stdout",O_WRONLY,0600)
这样可以吗
主要是对于设备文件的标志位该怎么设置呢?
我试了几次 都不成功啊!!



嗯~我也试过了,是不成功。

原因在于/dev/stdin等效于/dev/fd/1

也是依赖于已经打开的文件描述符,所以你关闭以后就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP