Chinaunix首页 | 论坛 | 博客
  • 博客访问: 827806
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: LINUX

2008-11-20 19:40:38

#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。

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