关于重定向的API

#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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值