说实话,第一次接触重定向这一个概念,感觉是那么的神奇简洁不可思议……………………

freopen() 本来应该是打开的是文件指针,但是分配了指针,使她(亲切)指向了标准输入、输出、错误流。

用 法: FILE *freopen(const char *filename,const char *type, FILE *stream);
头文件:stdio.h
值得注意的是,如果stream已经打开,应该首先将其关闭。
来自百度百科的实例:
#include <stdio.h>
int main()
{
    /* redirect standard output to a file */
    if (freopen("D:\\OUTPUT.txt", "w", stdout)==NULL)//冲定向一个标准输出流,写入文件
        fprintf(stderr, "error redirecting stdout\n");
    /* this output will go to a file */
    printf("This will go into a file.");//流已经打开,此时可以按照普通的方式写入
    /* close the standard output stream */
    fclose(stdout);//最后记得关闭
    return 0;
}
 
例二:这个例子实现了从stdout到一个文本文件的重定向。即,把本该输出到屏幕的文本输出到一个文本文件中。为什么??因为他已经重定向了。
#include <stdio.h>
int main()
{
    int i;
    if (freopen("D:\\OUTPUT.txt", "w", stdout)==NULL)
        fprintf(stderr, "error redirecting\stdout\n");
    for(i=0;i<10;i++)
        printf("%3d",i);
    printf("\n");
    fclose(stdout);
    return 0;
}
于是乎,就将0--9写入了文件。
例三:
从一个文件中读取数据计算之后,将数据写入另外一个文件
#include <stdio.h>
int main()
{
    freopen("in.txt","r",stdin); /*如果in.txt不在连接后的exe的目录,需要指定路径如D:\\in.txt*/
    freopen("out.txt","w",stdout);/*同上*/
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
        printf("%d\n",a+b);
    fclose(stdin);
    fclose(stdout);
    return 0;
}
 
这样就从in.txt读取数据,然后处理,最后写入out.txt文件。在这过程中,不需要你插手。#_# 越来越喜欢她(爱)了
 
若要返回到显示默认状态,使用下面的调用:
freopen( "CON", "w", stdout ); //输出到控制台"CON"
检查 freopen() 以确保重定向实际发生的返回值。
 
/*Compile options needed: none*/
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
    FILE *stream ; //将内容写到file.txt, "W"是写 ("r"是读)
    if((stream = freopen("file.txt", "w", stdout)) == NULL)
        exit(-1);
    printf("this is stdout output\n");
    stream = freopen("CON", "w", stdout);/*stdout 是向程序的末尾的控制台重定向*///这样就重新回到了默认状态下了。
    printf("And now back to the console once again\n");
}
 
警告:在使用上诉方法在输入输出流间进行反复的重定向时,极有可能导致流指针得到不被期待的结果,是输入输出发生异常,所以如果需要在文件的输入输出和标准输入输出流之间进行切换建议使用fopen或者是c++标准的ifstream及ofstream。
 

C-重定向的更多相关文章

  1. Http状态码之:301、302重定向

    概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一.如果可能,拥有链接编辑功能的客户端应当自动把请求的地 ...

  2. 前端学HTTP之重定向和负载均衡

    前面的话 HTTP并不是独自运行在网上的.很多协议都会在HTTP报文的传输过程中对其数据进行管理.HTTP只关心旅程的端点(发送者和接收者),但在包含有镜像服务器.Web代理和缓存的网络世界中,HTT ...

  3. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击.   场景分析 假设有一个正规网站http:// ...

  4. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

  5. Chrome在302重定向的时候对原请求产生2次请求的问题说明

    这个问题应该确确实实是一个Chrome的BUG,我在自己的编程环境中发现,并在多个服务器,多个编程语言的运行环境,以及多个浏览器下都测试过,都看到有2次请求出现.为了证明不是自己环境的问题,我也特意去 ...

  6. 重定向Http status code 303 和 302

    http 302 http 303 Http 302 302是一个普通的重定向代码.直观的看来是,请求者(浏览器或者模拟http请求)发起一个请求,然后服务端重定向到另一个地址.而事实上,服务端仅仅是 ...

  7. mvc 重定向的几种方式

    在RouteConfig添加一个简单的路由 //新增路由 routes.MapRoute( name: "Article", url: "Detial/{id}" ...

  8. C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

    我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...

  9. JavaWeb_day04搜索_乱码_路径_转发重定向_cookie

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 搜索功能 DAO层都是一些数据库的增删改查操作 Ser ...

  10. linux中输入输出和重定向问题

    输入输出解释 当我们执行shell的时候,每个进程都和三个打开的文件有关系,并使用文件描述符来引用这些文件.但这些文件不容易记忆,所以shell给了相应的文件名: 0:输入文件-标准输入(它的命令是输 ...

随机推荐

  1. windows 7 memcached报failed to install service or service already installed的解决方案

    今天心血来潮捣鼓一下memcache,由于系统是windows 7,我参考了 Windows下安装Memcache 使用memcached for Win32. 在运行memcached.exe -d ...

  2. 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构

    当新建完一个cocos2d-x的项目后.进入到项目中的proj.android中,会看到例如以下的文件夹结构 在VS先把它编译,然后导入到Eclipse中,导入完后会看到多了几个文件 watermar ...

  3. cron 定时任务

    cron 是linux下的定时任务: M H D m d cmd.  这是一种cron文件格式.   M: 分钟(0-59). H:小时(0-23). D:天(1-31). m: 月(1-12). d ...

  4. JavaScript引用类型之Array数组的concat()和push()方法的区别

    在javascript中,我们一般都只用push向数组的尾部插入新元素的,但是其实在javascript中还有另外一个方法和push一样,也是向数组尾部插入新元素的,但是他们之间却存在着一定的区别,当 ...

  5. 有关android源码编译的几个问题

    项目用到编译环境,与源码有些差异不能照搬,关键是连源码都没编译过,下面基本上是行网上照的各种自学成才的分享,病急乱投医了,都记在下面作为参照吧. 1.验证是否编译正确,在终端执行 emulator & ...

  6. iphone/ipad前端开发技巧

    iPad开发的局限性 在iPad上使用Safari浏览普通网站网页的时候,网页因为太大而导致需要手动放大缩小或者滑动,虽然这种滑动行为在iPad上市之初的各种宣传中被津津乐道,但时间久了我们还是会发现 ...

  7. HDU 5573 Binary Tree(找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7... ...

  8. C++ this 指针

    类的(非静态)成员函数具有一个附加的隐含形参,即指向该类对象的一个指针.这个隐含形参命名为this,与调用成员函数的对象绑定在一起.成员函数不能定义this形参,而是由编译器隐含地定义.成员函数的函数 ...

  9. J - 今年暑假不AC

    J - 今年暑假不AC Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  10. linux grep 指定字符串的正则表达式

    cat all_uuid_log | grep "[a-z0-9]\{32\}"