接着上节课的标准输出讲。
视频最后我们通过重定向把标准输出写到了文件中,但是错误输出还是留在了屏幕上。
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
五分钟搞懂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输出到串口输出的多种方法,包括调用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次下载
Linux I/O重定向详解
Linux I/O重定向可以定义为,更改从命令读取输入到命令发送输出的方式。你可以重定向命令的输入和输出。对于重定向符号,可以是 或者
printf输出重定向的方法
在 PC 上运行 C 语言时,prinf 输出的内容会打印在电脑显示器上,这是因为 prinf 默认的输出设备就是显示器。而当我们在单片机上,需要通过 printf 函数将信息打印到串口,就要对 printf 函数的输出进行
如何实现Printf()接口重定向到UART
;。所谓的重定向,就是重新定义Printf()接口函数里调用的与输出设备相关的函数,eg:使用Printf()接口将MCU中的信息,通过串口或者Ethernet输出到终端上位机。
评论