考虑以下非常基本的程序,它在此处以多种形式出现在其他问题上。
#include <string.h>
int main() {
char message[8];
strcpy(message, "Hello, world!");
}
在我的系统上,如果我把它放在一个名为 的文件中Classic.c
,不使用特殊标志编译它并运行它,我会得到以下输出。
$ gcc -o Classic Class.c
$ ./Classic
*** stack smashing detected ***: ./Classic terminated
Aborted (core dumped)
通常,程序输出到stderr
or stdout
,所以我预计以下不会产生输出。
./Classic 2> /dev/null > /dev/null
然而,输出是完全一样的,所以我对这个场景有三个问题。
- 什么流被打印到这里?
- 我怎么能编写打印到这个特殊流的代码(而不是故意破坏我的堆栈)。
- 如何重定向此流的输出?
注意我在 Linux 系统上运行。具体来说,Ubuntu 14.04。