控制台重定向stdout & stderr

17 篇文章 4 订阅
3 篇文章 0 订阅

    通常,一个控制台(命令提示符)应用程序或命令的输出将发送到两个单独的流.常规的输出发送到标准出
(stdout)
并将错误消息发送到标准错误(stderr).当你重定向控制台输出使用">"符号,只重定向标准输出.要重定向stderr,必须指定"2> >"的重定向符号.这将选择第二个输出流stderr

$ kill -HUP 1234 >killout.txt 2>killerr.txt

    这个命令就会将输出和错误信息分别存放在一个单独的文件中.如果我们要将这两个输出放在一个文件中,我们可以使用>&来组合这两种输出.如:

$ kill -1 1234 >killouterr.txt 2>&1

    这个命令就可以将所有的输出放在同一个文件中.在这里我们要注意的就是命令的顺序.这个命令的顺序可以解释为重定向标准输出到文件killouterr.然后重定向标准错误输出到与标准输出同一的地方.如果我们弄错了顺序,我们就不会得到我们希望的输出.
    在这里我们会看到kill命令的结果使用了返回代码,然而常常是我们并不需要保存标准输出或是标准错误输出.我们可以使用UNIX中的/dev/null来忽略所有的错误输出.如:

$ kill -1 1234 >/dev/null 2>&1
gcc -Wall whestone -lm -o output/whestone.out
echo "=========== Whestone Running Report ==========="
date | tee -a ./output/whestone.report
echo "V2.2 BEGIN"
{ time ./output/whestone.out 1000000; } >> ./output/whestone.report 2>> ./output/whestone.report
echo " " >> ./output/whestone.report


今天在编译程序时碰到该问题:

whetstone.c:(.text+0x56c): undefined reference to `sin'
whetstone.c:(.text+0x585): undefined reference to `cos'
whetstone.c:(.text+0x5cf): undefined reference to `atan'

    检查头文件math.h已经包含,原来虽然程序中已经包含math.h,但在链接时要链接到数学库,加上-lm编译选项即可,如下:
gcc whetstone.c -o whetstone 改为 gcc whetstone.c -lm -o whetstone即可。

PS : 我的系统是centos,同样的问题也解决了…

    使用 math.h 中声明的库函数还有一点特殊之处,gcc 命令行必须加-lm 选项,因为数学函
数位于 libm.so 库文件中(这些库文件通常位于/lib 目录下),-lm 选项告诉编译器,
我们程序中用到的数学函数要到这个库文件里找。本书用到的大部分库函数(例如printf)位于 libc.so 库文件中,使用 libc.so 中的库函数在编译时不需要加-lc 选项,
    当然加了也不算错,因为这个选项是 gcc 的默认选项。
(以上选自《linux C 编程》)

欢迎大家关注本人VX公众号,日常分享一些设计小知识。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值