免费注册 查看新帖 |

Chinaunix

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

[Linux] [结贴]为什么dup总是复制一个fd到标准输出? 这是默认的行为吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-01 09:41 |只看该作者 |倒序浏览
本帖最后由 centos_71 于 2015-02-02 20:43 编辑

dup函数只有一个参数,也就是输入一个fd,可是没有另外一个参数说,要把这个fd复制给谁?
下面这个小程序,调用fd的结果是,打开的一个文件fd被复制到了标准输出,以至于execl调用的打印内容,被重定向到了文件当中。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <sys/stat.h>
  7. int main(void){
  8.     int filedes;
  9.     if((filedes=open("dd.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))<0)
  10.         fprintf(stderr,"%s ","open file error");
  11.     close(1);
  12.     dup(filedes);
  13.     close(filedes);
  14.     execlp("ls","-l",(char * )0);
  15.     return 0;
  16. }
复制代码
所以看起来dup程序就是要复制一个fd到stdout。是这样的吗,如果我要dup到stdout以外的fd怎么办呢?

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
2 [报告]
发表于 2015-02-01 09:42 |只看该作者
dup到最小的可用文件描述符

论坛徽章:
0
3 [报告]
发表于 2015-02-01 13:32 |只看该作者
回复 2# super皮波

原来是dup到一个最小的可用的文件描述符。我有点入门了,谢谢。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
4 [报告]
发表于 2015-02-01 16:02 |只看该作者
要复制原描述符到一个指定的描述符,可用dup2或dup3
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP