次の非常に基本的なプログラムを考えてみましょう。これは、ここで他の質問にさまざまな形で登場しています。
#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
またはstdout
に行くので、次の場合は何も出力されないだろうと予想しました。
./Classic 2> /dev/null > /dev/null
ただし、出力はまったく同じであるため、このシナリオについて 3 つの質問があります。
- ここに出力されているストリームは何ですか?
- この特別なストリームに出力するコードをどのように書くことができますか (故意にスタックを壊すことなく)。
- このストリームの出力をリダイレクトするにはどうすればよいですか?
Linux システムで実行していることに注意してください。具体的には、Ubuntu 14.04.