#include <unistd.h> int dup(int filedes); int dup2(int filedes,int filedes2)
|
参考apue里面的说明,可以用filedes2参数指定新描述符的数值,如果filedes2已经打开则先关闭。
这样我们把STDOUT_FILENO当作filedes,这样标准输出就被重定向到filedes的描述符的文件下了。实验代码如下:
#include <unistd.h> 2 #include <stdio.h> 3 #include <sys/stat.h> 4 #include <fcntl.h> 5 #define FILE_MODE (S_IRUSR |S_IWUSR | S_IXGRP | S_IXOTH) 6 int 7 main(void) 8 { 9 int fd; 10 printf("hello,eelb!!\n"); 11 if ((fd = creat("due_txt", FILE_MODE))<0) { 12 perror("creat error"); 13 exit(0); 14 } 15 else { 16 dup2(fd,STDOUT_FILENO); 17 printf("hello,ee!!\n"); 18 } 19 dup2(STDIN_FILENO,STDOUT_FILENO); 20 printf("after hello\n"); 21 exit(0); 23 }
|
有几点要注意的:
1、首先每一个printf后面都加了\n,因为标准输出一直是行缓冲,就算重定向到文件,我试了还是行缓冲,所以不加换行,那么所有的输出都不会自动flush的。
2、还有把标准输出重新重定向到控制台的时候遇到一个问题,如果三个标准都被重定向了那么咋办。。思考中,我在想如果三个都重定向,是不是会自动关掉,再用open。
阅读(2261) | 评论(0) | 转发(0) |