设为首页 加入收藏

TOP

用dup2和dup产生一份拷贝(一)
2014-04-06 17:40:38 来源: 作者: 【 】 浏览:198
Tags:dup2 dup 产生 拷贝

  在类Unix操作系统里面,。dup2和dup都通过系统调用来产生一份file descriptor 的拷贝。

  dup对我来说还很简单

  int dup(int filedes);

  dup2就有点犯迷糊了

  int dup2(int filedes1,int filedes2);

  其实这样declaration更好

  int dup2(int oldfd,int newfd)

  下面是apue给出的解释

  With dup2, we specify the value of the new descriptor with the fd2 argument.

  If fd2 is already open, it is first closed. If fd equals fd2,t hen dup2 re turns fd2 without closing it.

  Otherwise, theFD_CLOEXECfile descriptor flag is cleared forfd2, so that fd2 is left open if the process calls exec

  我就比较疑惑,如果newfd是STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO,(0,1,2)三个中的一个呢

  dup2是返回错误还是 “fd2 is already open, it is first closed”呢

  Just test it.

  #include

  #include"fcntl.h"

  #include

  int main()

  {

  int file_descriptor;

  if((file_descriptor = open("./text.t",O_RDWR)) < 0)

  {

  printf("error\n");

  }

  else

  {

  printf("file descriptor is %d\n",file_descriptor);

  }

  printf("dup2 return value:%d\n dup return value\

  %d\n",dup2(file_descriptor,0),dup(file_descriptor));

  printf("dup2 return value:%d\ndup return value\

  %d\n",dup2(file_descriptor,1),dup(file_descriptor));

  printf("dup2 return value:%d\ndup return value\

  %d\n",dup2(file_descriptor,2),dup(file_descriptor));

  close(file_descriptor);

  return 0;

  }

  Aha! Something interesting happened.

  运行结果:

  file descriptor is 3

  dup2 return value:0

  dup return value 4

  以上就是这段code的运行结果。嗯。。。我有三个printf语句,为啥米只答应了第一个,WTF。。。

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++因子和阶乘 下一篇BrainFuck的编译器官方版发布

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: