Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343758
  • 博文数量: 72
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-05 16:10
文章分类

全部博文(72)

文章存档

2010年(5)

2009年(14)

2008年(53)

分类: LINUX

2008-10-14 11:51:20

    dupdup2函数:int dup(int filedes); int dup2(int filedes,int filedes2);

    返回:若成功为新的文件描述符,若出错为-1

    作用:用来复制一个文件描述符,经常用来重定向进程的stdin,stdout,stderr

    dup返回的新文件描述符一定是当前可用文件描述符中最小数值,该新的描述符是传递给它的描述符的拷贝,这意味着这两个描述符共享同一个数据结构。用dup2则可以用filedes2参数指定新描述符的数值,如果filedes2已经打开,则先将其关闭,如果filedes等于filedes2,则dup2返回filedes2,而不关闭它。

    范例:

    #include

    #include

    #include

    #include

    #include

    #include

    int main(void)

    {

         int fd;

         int fddup;

         int fddup2;

         char buf1[]="Hello, world!";

         char buf2[50];

         if((fd=open("/home/sam/helloworld",O_CREAT|O_TRUNC|O_RDWR,0666))==-1)

         {

             printf("Open or create file named \"helloworld\" failed.\n");

             exit(1);

         }

         printf("%d\n",fd);

         write(fd,buf1,sizeof(buf1));

         close(fd);

         if((fd=open("/home/sam/helloworld",O_RDONLY))==-1)

         {

             printf("Open file named \"helloworld\" failed.\n");

             exit(1);

         }

         printf("%d\n",fd);

         fddup=dup(fd);

         fddup2=dup2(fd,8);

         printf("%d\n",fddup);

         printf("%d\n",fddup2);

         read(fddup2,buf2,sizeof(buf2));

         printf("%s\n",buf2);

         close(fd);

         close(fddup);

         close(fddup2);

         return 0;

    }

阅读(937) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~