关闭

关于重定向的API

730人阅读 评论(0) 收藏 举报
分类:
#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);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27647次
    • 积分:617
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:21篇
    • 译文:0篇
    • 评论:1条
    最新评论