关于重定向的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);

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

重定位的原理&实现

重定位  病毒自身的重定位是病毒代码在得以顺利运行前应解决的最基本问题。病毒代码在运行时同样也要引用一些数据,比如API 函数的名字、杀毒软件的黑名单、系统相关的特殊数据等,由于病毒代码在宿主进程中运...
  • xuplus
  • xuplus
  • 2008-04-15 12:01
  • 4855

病毒程序的重定位+动态获取API+获取kernel32.dll基地址+钩子+驻留内存

1. 病毒程序:1)宿主:被病毒感染的程序。例如:exe dll office文档   2)重定位:在病毒体中使用绝对位置规定的变量或入口地址,病毒体被插入到宿主程序时,这些规定的绝对位置可以已经被...

cgi + http + 重定向

  • 2016-05-18 17:53
  • 23KB
  • 下载

Springmvc重定向参数以及表单提交问题的认识

在spring的一个controller中要把参数传到页面,只要配置视图解析器,把参数添加到Model中,在页面用el表达式就可以取到。但是,这样使用的是forward方式,浏览器的地址栏是不变的,如...

请求转发与重定向

  • 2016-05-24 05:56
  • 244B
  • 下载

重定向和转发的区别

  • 2014-09-04 16:55
  • 685B
  • 下载

Linux数据重定向详细分析

linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2以后打开文件后。新增文件...

输入输出重定向

  • 2014-08-31 22:27
  • 15KB
  • 下载

页面转向与重定向

  • 2013-06-05 15:05
  • 33KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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