关于重定向的API

原创 2013年12月03日 14:41:43
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    int fd, outBak;
    // const char *str1 = "write in dup2TestFile\n";
    // const char *str2 = "write in tty\n";
    const char *str3 = "printf in dup2TestFile\n";
    const char *str4 = "printf in tty\n";

    fd = open("dup2TestFile", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
    if (-1 == fd)
    {
        printf("open dup2TestFile fail!\n");
        exit(1);
    }

    outBak = dup(STDOUT_FILENO);
    if (-1 == outBak)
    {
        printf("dup STDOUT_FILENO  fail!\n");
        exit(1);
    }

    if (dup2(fd, STDOUT_FILENO) != STDOUT_FILENO)
    {
        //printf("fd dup2 STDOUT_FILENO  fail!\n");
        write(outBak, "fd dup2 STDOUT_FILENO  fail!\n", sizeof("fd dup2 STDOUT_FILENO  fail!\n"));
        exit(1);
    }
    
    printf("%s\n", str3); // 标准IO有缓冲的,文件IO则无缓冲,而stdout默认行缓冲,普通文件则全缓冲
    fflush(stdout);

    if (dup2(outBak, STDOUT_FILENO) != STDOUT_FILENO)
    {
        //printf("outBak dup2 STDOUT_FILENO  fail!\n");
        write(outBak, "outBak dup2 STDOUT_FILENO  fail!\n", sizeof("outBak dup2 STDOUT_FILENO  fail!\n"));
        exit(1);
    }

    printf("%s\n", str4);

    return 0;
}

// 记得使用perror
// 若flcose(stdout); 则(无论何时,任何重定向到该流的文件 都)无法使用stdout进行写入,example: printf("can not be write out\n");不能输出.

 

标准IO的重定向接口有FILE* fropen(const char* path, const char* mode, FILE* fp);

文件IO的重定向接口有dup2(int fd, int copyfd);

文件流和描述符的转换,fdopen(int fd, const char* mode); fileno(FILE* fp);

HTTP请求重定向的接口,获取该接口重定向地址

正常来说,java代码发起HTTP请求到一个重定向的接口,请求的结果为接口内重定向后页面的html源码。对于这种重定向接口,查看控制台可以看到,其重定向后的地址在Response Headers中的L...
  • Fasure_Smile
  • Fasure_Smile
  • 2016年08月24日 17:09
  • 3462

关于控制台程序输出重定向到IDE两个例子 之一

例子一:编写自己的IDE如何在图形界面中实时捕获控制台程序的标准输出本文未曾在商业媒体发表过, 如需转载, 请注明作者 [王咏刚] 和出处 [www.contextfree.net]IDE是集成开发环...
  • shiwei0124
  • shiwei0124
  • 2009年09月11日 13:11
  • 3410

printf的重定向与恢复

把行信息打印到stdio窗口,然后再有一行到文件,接着又有一行到stdio屏幕。 先来看一个错误的例子 #include int main (int argc, char *argv[]) ...
  • wind19
  • wind19
  • 2012年04月25日 17:00
  • 7197

标准IO重定向到文件非交互式设备时的缓冲策略

首先提两个熟悉的概念 全缓冲:在进行I/O操作时,只有当I/O缓冲区被填满时,才进行真正的I/O操作。所以对于全缓冲的缓冲区可由标准I/O例程自动刷新,即当缓冲区填满时,还有一种方法就是调用函数...
  • dreamvyps
  • dreamvyps
  • 2017年07月09日 23:42
  • 213

重定向输入和输出

      本文介绍如何重定向输入和输出的子进程从标准输入句柄接收输入,或将输出发送到标准输出句柄。Win32 API 使应用程序可以生成与重定向标准的句柄的子控制台进程。此功能允许父进程发送和接收的...
  • zougangx
  • zougangx
  • 2010年05月17日 17:42
  • 2617

重定向问题

除了人工的分析之外,最简单最直接的调试方法要算printf了。不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一...
  • bugouyonggan
  • bugouyonggan
  • 2014年02月18日 15:32
  • 2731

理解重定向之dup,dup2

Linux下当使用 ls > file 命令,可以将原本输出在屏幕上的文字重定向到file文件中(如果没有file文件则创建之) 我们可以利用dup,dup2函数也实现一下重定向。它们的接口如下:#i...
  • xy913741894
  • xy913741894
  • 2017年06月22日 17:35
  • 217

cmd命令的管道重定向

#include "windows.h" #include "iostream" using namespace std; HANDLE hRead,hWrite,dWrite,dRead; D...
  • a7320760
  • a7320760
  • 2011年07月19日 09:42
  • 4470

重定向输出遇到的缓冲问题

一个项目中需要迭代计算,时间长,但是在重定向输出的时候所有标准输出不能及时输出,这就要求程序主函数正常运行完后才能正常输出到文件。 因为标准输出到终端时默认行缓冲或无缓冲,重定向到硬盘之后,就变成了...
  • silyvin
  • silyvin
  • 2012年12月11日 11:33
  • 2590

重定向子进程控制台程序的输入输出

重定向所做的工作都在父进程,但需要子进程遵守下面的规则: 子进程程序在输出代码后,等待输入之前需要调用fflush(stdout)函数,这样把输出的内容放入缓冲区,父进程才能及时的读到输出数据。 ...
  • jiaweizou
  • jiaweizou
  • 2012年11月23日 08:58
  • 3537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于重定向的API
举报原因:
原因补充:

(最多只允许输入30个字)