用dup,测试标准输出的重定位

系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号)。dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符。

他的原型如下:

#include <unsitd.h>

int dup(int oldfd);

int dup2(int oldfd,int newfd);

dup 和dup2都是返回新的描述符。或者返回-1并设置 errno变量。新老描述符共享文件的偏移量(位置)、标志和锁,但是不共享close-on-exec标志。


//用dup,测试标准输出的重定位

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>


int main(void)
{
  int fd1=-1,fd2=-1;
  //打开一个文件,fd1
  fd1=open("1.txt",O_RDWR | O_CREAT | O_TRUNC,0644);
  if(-1==fd1)
    {
      perror("文件打开失败.\n");
      return -1;
    }
  printf("文件打开成功,fd1=%d.\n",fd1);

  //关闭标准输出,用dup复制fd1,返回的fd2是标准输出1

  close(1);

  fd2=dup(fd1); //返回的一定是1,因为刚关闭标准输出,则 输出的内容不会在命令行显示,输出的内容显示在1.txt中

                             // 1.txt文件和标准输出就绑定起来了,所以以后输出到标准输出的信息就可以到1.txt中查看

#if 0

  printf("fd2=%d.\n",fd2);
  printf("this is a test for dup");
 #endif

  while(1)
   {
     write(fd1,"abcd",4);
     sleep(1);
     write(fd1,"dcba",4);
   }

  close(fd1);
  return -1;


}


测试的结果为在命令行中无显示,在1.txt中可看到输出结果过,证明标准输出已经被重新定位到1.txt













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值