0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

2分钟搞懂输出重定向

学益得智能硬件 来源:学益得智能硬件 2024-01-15 16:41 次阅读

接着上节课的标准输出讲。

视频最后我们通过重定向把标准输出写到了文件中,但是错误输出还是留在了屏幕上。

root@turbo:~# ls
test  test.c
root@turbo:~# 
root@turbo:~# ./test 
xxxxxx 错误输出
------ 标准输出
root@turbo:~# 
root@turbo:~# ./test > out.log
xxxxxx 错误输出
root@turbo:~# 
root@turbo:~#
有没有什么方法把错误输出也写到文件里面?

重定向分为输入重定向输出重定向,输入重定向使用场景比较少,我们主要来讲讲输出重定向。

先把程序修改一下,只留下标准输出。
#include 


int main()
{
    //fprintf(stderr, "xxxxxx 错误输出
");


    fprintf(stdout, "------ 标准输出
");


    return 0;
}
运行程序的时候会在屏幕上打印字符串,如果希望把这些字符串收集起来,运行的时候加上输出符号和文件名,字符串就写到了文件里面。
root@turbo:~# gcc test.c -o test 
root@turbo:~# ./test > out.log
root@turbo:~#
一个符号表示清空文件重新写入,两个符号表示往文件的后面追加。

再把程序改回来,这次既有标准输出,也有错误输出:
#include 


int main()
{
    fprintf(stderr, "xxxxxx 错误输出
");


    fprintf(stdout, "------ 标准输出
");


    return 0;
}
代码的运行现象是这样的:
root@turbo:~# ls
test  test.c
root@turbo:~# ./test 
xxxxxx 错误输出
------ 标准输出
root@turbo:~#
如果像刚才一样加上重定向,那只能把标准输出写到文件中:
root@turbo:~# ls
test  test.c
root@turbo:~# ./test > out.log
xxxxxx 错误输出
root@turbo:~# 
root@turbo:~#
其实这种写法也等价于这样的:
root@turbo:~# ls
test  test.c
root@turbo:~# ./test 1> out.log
xxxxxx 错误输出
root@turbo:~# 
root@turbo:~#
0 1 2在 Linux 中分别表示标准输入、标准输出、标准错误处理,大部分时候我们会把1省略掉。

如果想把错误信息也收集到文件中,可以这样写:
root@turbo:~# ls
out.log  test  test.c
root@turbo:~# ./test 1> out.log 2> error.log
root@turbo:~#
意思也很明确,标准输出写到文件out.log中,错误输出写到文件error.log中。

这就是上节课说的,stdout和stderr可以把不同级别的信息分开。

如果想把标准输出和错误输出写到同一个文件中,可以使用这条命令:
root@turbo:~# ./test > out.log 2>&1
root@turbo:~#
2>&1
这个符号的意思就是把错误输出重定向到标准输出。

需要注意的是,此处的顺序不能修改,否则达不到想要的效果。

有的时候我们不想看到输出信息,也不想保存输出信息,可以考虑dev下的null设备文件,所有写进去的数据都会被丢弃。
root@turbo:~# ./test > /dev/null 2>&1
root@turbo:~#






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11191

    浏览量

    208624
  • 字符串
    +关注

    关注

    1

    文章

    567

    浏览量

    20456

原文标题:2分钟搞懂输出重定向

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    linux shell数据重定向(输入重定向输出重定向)详细分析

    >> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr输出重定向:[cpp] view plain copycommand-line1
    发表于 03-02 13:59

    Linux Shell系列教程之(十六) Shell输入输出重定向

      Command > filename 2>&1把标准输出和错误一起重定向到一个文件中  Command 2 > filename把标准错误重定向
    发表于 09-12 15:53

    如何对Linux Bash输入输出重定向

    Linux - Bash - 输入输出重定向
    发表于 04-27 09:01

    Linux输入与输出重定向介绍

    Linux输入与输出重定向
    发表于 06-12 14:54

    分钟搞懂PID控制算法

    【Arduino 101】五分钟搞懂PID控制算法物料清单尺寸接线文章目录物料清单尺寸接线物料清单Arduino Uno x 1超声波模块(HC-SR04)x 1舵机(Tower Pro
    发表于 06-28 07:53

    实现printf函数的重定向

    目录重定向函数属性设置重定向函数在配置好串口之后需要在相关文件中添加以下函数以实现printf函数的重定向//注意添加头文件#include "stdio.h"#ifdef
    发表于 08-24 07:09

    如何重定向printf输出到串口输出

    如何重定向printf输出到串口输出呢?有哪几种方法?
    发表于 12-02 06:04

    请问一下stm32输出重定向是怎么定义的

    请问一下stm32输出重定向是怎么定义的?
    发表于 12-02 07:05

    重定向printf输出到串口输出的方法

    本文详细的介绍了如何重定向printf输出到串口输出的多种方法,包括调用MDK微库(MicroLib)的方法,调用标准库的方法,以及适用于 `GNUC` 系列编译器的方法。
    发表于 02-10 07:16

    DNS 重定向的缺陷

    DNS 重定向的缺陷 这一种路由解决方案,由于充分利用了现有的网络结构,结构简单,因而被人们认为是一种有效的技术,是现阶段CDN 应用中主
    发表于 03-25 10:25 2263次阅读

    管道符、重定向与环境变量

    1.标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。 3.错误输出重定向(STDERR,文件描述符为2):默认
    发表于 04-29 08:48 592次阅读

    Keil下使用STlink重定向printf的配置

    Keil下使用STlink重定向printf的配置1. printf 重定向Keil默认下使用Micro LIB库,该库调用 fputs 实现 printf,所以需要重新定义fputs函数,以重定向
    发表于 12-27 18:43 18次下载
    Keil下使用STlink<b class='flag-5'>重定向</b>printf的配置

    Linux I/O重定向详解

    Linux I/O重定向可以定义为,更改从命令读取输入到命令发送输出的方式。你可以重定向命令的输入和输出。对于重定向符号,可以是 或者
    的头像 发表于 05-04 14:34 790次阅读

    printf输出重定向的方法

    在 PC 上运行 C 语言时,prinf 输出的内容会打印在电脑显示器上,这是因为 prinf 默认的输出设备就是显示器。而当我们在单片机上,需要通过 printf 函数将信息打印到串口,就要对 printf 函数的输出进行
    的头像 发表于 05-14 16:22 5133次阅读
    printf<b class='flag-5'>输出</b><b class='flag-5'>重定向</b>的方法

    如何实现Printf()接口重定向到UART

    ;。所谓的重定向,就是重新定义Printf()接口函数里调用的与输出设备相关的函数,eg:使用Printf()接口将MCU中的信息,通过串口或者Ethernet输出到终端上位机。
    的头像 发表于 10-01 10:13 1213次阅读
    如何实现Printf()接口<b class='flag-5'>重定向</b>到UART