Welchen Stream wird die Meldung "Stack Smashing Detected" gedruckt?

Betrachten Sie das folgende sehr grundlegende Programm, das in vielen Formen zu anderen Fragen hier aufgetaucht ist.

#include <string.h>

int main() {
    char message[8];
    strcpy(message, "Hello, world!");
}

uf meinem System, wenn ich dies in eine Datei mit dem NamenClassic.c, kompiliere es ohne spezielle Flags und starte es. Ich erhalte die folgende Ausgabe.

$ gcc -o Classic Class.c 
$ ./Classic
*** stack smashing detected ***: ./Classic terminated
Aborted (core dumped)

Normalerweise geht die Programmausgabe zustderr oderstdout, also erwartete ich, dass das folgende keine Ausgabe produzieren würde.

./Classic  2> /dev/null > /dev/null

Die Ausgabe ist jedoch genau gleich, sodass ich drei Fragen zu diesem Szenario habe.

Welcher Stream wird hier gedruckt?Wie kann ich Code schreiben, der in diesen speziellen Stream druckt (ohne meinen Stapel absichtlich zu zerschlagen)?Wie kann ich die Ausgabe dieses Streams umleiten?

Hinweis Ich arbeite auf einem Linux-System. Insbesondere Ubuntu 14.04.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage