• 【Linux】项目日志——输出重定向


    项目日志——输出重定向

    前言

    在通常情况下,Linux/UNIX每个程序在开始运行的时候,都会自动打开三个标准stream(流),分别为标准输入流stdin(文件描述符0),标准输出流stdout(文件描述符1),标准错误输出流stderr(文件描述符2)。

    Linux的本质就是一切皆文件,输入输出设备也是以文件形式存在和管理的。

    • stderr是不缓存的,stdout则进行行间缓存,即遇到\n才打印输出。示例如下:
    #include 
    #include 
    
    int main(int argc, char** argv)
    {
        for(int i = 0; i < 5; i++){
            fprintf(stdout, "This is stdout[%d]", i);
            sleep(1);
            
        }
        fprintf(stdout,"\n");//stdout
        sleep(1);
    
        for(int i = 0; i < 5; i++){
            fprintf(stderr, "This is stderr[%d]", i);
            sleep(1);
        } 
        sleep(60);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 可以发现,第一个循环(stdout)的内容会被一次性打印出来,第二个循环(stderr)的内容会一个一个的打印出来。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EprzNsiX-1658738934127)(C:/Users/16602/AppData/Roaming/Typora/typora-user-images/image-20220725114343557.png)]

    重定向

    • 有时我们使用printf来打印调试信息,但是如果终端关掉,我们就无法查看到信息了。
    • 所以需要我们保存在文件中,以便永久保存。

    >

    • 将标准输出重定向到文件
    ./test > test.txt
    
    • 1
    • 将标准输入和标准出错重定向到文件
    ./test 1 > testout.txt ./test 2 > testerr.txt
    
    • 1

    >>

    • 以附加方式重定向到文件
    • 例如:将标准输入和标准出错以追加的方式重定向到文件中
    ./test > test1.txt 2>&1
    
    • 1

    代码中实现重定向操作

    #include 
    int main(void){
        FILE *out = freopen("stdout.txt", "w", stdout);
        printf("%s\n", "redirect test");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 通常在生产环境下,会将stdin,stdout,stderr这三个流重定向到其他文件。
    • 日志中最好加上日期、时间、文件等信息。
    • printf涉及到文件,可能会引起IO中断(会进行一系列的系统调用),因此执行printf比一般指令的效率要低很多。一般情况下不建议用printf。
  • 相关阅读:
    unity中的常用属性修饰符
    Android 遍历界面所有的View
    C++ 基础入门 之 注释 ( // 和 /**/ )/变量 /常量 ( #define 和 const )/关键字/标识符(变量名)命名规则
    Linux:zip包的压缩与解压
    BGP选路规则
    java计算机毕业设计奢品网站系统源码+系统+数据库+lw文档+mybatis+运行部署
    springboot闲置衣物捐赠系统毕业设计源码021009
    this.$once(‘hook:beforeDestory‘,()),销毁定时器
    【一篇就够】异步相关(一)
    VHDL菜鸟入门到精通之激励文件编写
  • 原文地址:https://blog.csdn.net/qq_51604330/article/details/125978600