<强> 强>
,,,,,,,# include & lt; unistd.h> ,,,,,,int dup (int oldfd); ,,,,,,int dup2 (int oldfd, int newfd);
,,1,# include2,才能# 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}
效果图
,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