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

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. ruby简单的基础 5

    方法和代码块 在Ruby中.{}或do...end之间的代码是一个代码块.代码块只能出如今一个方法的后边,它紧接在方法最后一个參数的同一行上,一般由yieldkeyword调用代码块中的代码. 方法是 ...

  2. JavaScript之arguements对象学习

    简介:在JavaScript中,有一个特殊的对象-Arguements对象,它是当前函数的一个内置属性,它类似与Array对象(数组形式),但不是Array的一个实例.下面通过代码来论证: <s ...

  3. PHP GUID的生成源码

    <?php function guid(){ if (function_exists('com_create_guid')){ return com_create_guid(); }else{ ...

  4. 6)图[2]Prim算法[最小生成树]

    Prim 算法 求解方法: 首先将所指定的起点作为已选顶点,然后反复在满足如下条件下的边中选择一条最小边,直到 所有顶点已成为已选顶点为止(选择n-1条边). #include "iostr ...

  5. laravel安装说明

    1.composer已安装.没安装可以看我上一篇 :http://www.cnblogs.com/seakt/p/4503249.html 2.配置环境变量,找到composer的位置,一般默认都在 ...

  6. bzoj 2141 : 排队 分块

    题目链接 2141: 排队 Time Limit: 4 Sec  Memory Limit: 259 MBSubmit: 1169  Solved: 465[Submit][Status][Discu ...

  7. java附件上传下载大字段版

    public int up2(Map map) { StringBuffer insertSQL = new StringBuffer(); insertSQL.append("insert ...

  8. 初识C(1)----与C基本无关的开篇

    1.啥叫编程 编程乃编写程序的简称,所以要想知道啥叫编程,首先要清楚什么是程序(Program). 普及一点计算机小知识:从根本上说,计算机是由数字电路组成的运算机器,处理的数字也仅限于0和1组成的数 ...

  9. pyhton

    http://panda.www.net.cn/cgi-bin/check.cgi?area_domain= http://whois.chinaz.com/ beautifulsoup4 impor ...

  10. NET Core开发-使用Nancy框架

    NET Core开发-使用Nancy框架 Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET ...