高级I/O - - - - - dup/dup2

  

<强>


,,,,,,,# include  & lt; unistd.h>      ,,,,,,int  dup (int  oldfd);   ,,,,,,int  dup2 (int  oldfd, int  newfd);


,,1,# include   2,才能# include   3,才能# include   4,才能# include   5,才能# include   6,才能# include   7,才能# define  _PATH_ “。/test.log”   8,才能   9,才能   ,10 int  main ()   ,11 {   ,12,,,,umask (0);   ,13,,,,int  fd=开放(_PATH_, O_CREAT | O_WRONLY, 0644);//打开一个新的文件   ,14日,,,,如果(fd<0)   ,15,,,,{   ,16岁,,,,,,,,perror(“开放”);   ,17岁,,,,}   ,18岁,,,,结束(1);//关掉需要用dup指向的文件描述符,注意(dup会使fd指向一个未使用的最,,,,,,,,,,,//小的文件描述符)   ,19岁,,,,int  new_fd=dup (fd);//现在1号文件描述符指向刚才开放的文件   ,20,,,,关闭(fd);,,,//关闭之前打开的文件描述符,如果不关闭,则从fd中也能网文件,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//里写。   ,21岁,,,,char  buf [1024];   ,22岁,,,,,(1)   ,23岁,,,,{   ,24岁,,,,,,,,memset (buf, ' \ 0 ', sizeof (buf));   ,25岁,,,,,,,,ssize_t 大?阅读(0 buf sizeof (buf) 1);   ,26岁,,,,,,,,如果(size> 0)   ,27,,,,,,,,{   ,28岁,,,,,,,,,,,,但(大小)=' \ 0 ';   ,29岁,,,,,,,,}   ,30岁,,,,,,,,如果(strncmp (buf“退出”4)==0)   ,31岁,,,,,,,,{,,   ,32岁,,,,,,,,,,,,休息;   ,31岁,,,,,,,,{   ,32岁,,,,,,,,,,,,休息;   ,33岁,,,,,,,,}   ,34岁,,,,,,,,printf (" % s ",但);//printf会输出到1号文件描述符中   ,35岁,,,,,,,,。fflush (stdout);   ,36,,,,}   ,37岁,,,,结束(1);   ,38岁,,,,return  0;   ,39}

效果图

高级I/O - - - - - dup/dup2”> <img src=


,1,# include   ,2 # include   ,3 # include   ,4 # include   ,5 # include   ,6 # include   ,7 # define  _PATH_ “。/test.log”   ,8   ,9 int  main ()   ,10 {   ,11,,,,umask (0);   ,12,,,,int  fd =开放(_PATH_, O_CREAT | O_WRONLY, 0644);   ,13,,,,如果(fd<0)   ,14日,,,,{   ,15,,,,,,,,perror(“开放”);   ,16岁,,,,}   ,17岁,,,,结束(1),,//使用dup2所使用的重定向到的文件描述符必须先关闭   ,18岁,,,,int  newfd=dup2 (fd, 1);   ,19岁,,,,关闭(fd);//关闭fd现在只有1号文件描述符指向所开放的文件   ,20,,,,char  buf [1024];   ,21岁,,,,printf (" % d \ n”, newfd);   ,22岁,,,,,(1)   ,23岁,,,,{   ,24岁,,,,,,,,memset (buf, ' \ 0 ', sizeof (buf));   ,25岁,,,,,,,,fgets (buf, sizeof (buf) 1, stdin);   ,26岁,,,,,,,,如果(strncmp (buf“退出”4)==0)   ,27,,,,,,,,{   ,28岁,,,,,,,,,,,,休息;   ,29岁,,,,,,,,}   null   null   null   null   null

高级I/O - - - - - dup/dup2