文件I/O函数(dup,dup2)

来源:岁月联盟 编辑:zhuzhu 时间:2008-10-23
文件I/O函数(dup,dup2)内容简介:dup和dup2函数:int dup(int filedes); int dup2(int filedes,int filedes2);返回:若成功为新的文件描述符,若出错为-1作用:用来复制一个文件描述符,经常用来重定向进程的stdin,stdout,stderr。由dup返回的新文件描述符一 dup和dup2函数: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;
}