¿Qué son "cerr"y " stderr"?


¿Cuál es la diferencia entre ellos y cómo se utilizan? ¿Alguien puede indicarme ejemplos?

Específicamente, ¿cómo "escribir" en el flujo en ambos casos y cómo recuperar y enviar (es decir, a la pantalla) el texto que se había escrito en él?

Además, la salida "screen" es en sí misma una secuencia ¿verdad? Tal vez no entiendo las corrientes lo suficientemente bien. Esto también se puede guardar en un archivo, por supuesto, lo sé. ¿Utilizarían todos estosfprintf / fscanf, ¿etc?

Author: Tshepang, 2010-07-08

2 answers

cerr es el flujo de C++ y stderr es el controlador de archivo C, ambos representan la salida de error estándar.

Escribes a ellos de la misma manera que escribes a otros flujos y manejadores de archivos:

cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");

No estoy seguro de lo que quiere decir con "recuperar" en este contexto, la salida va a error estándar y eso es todo. El programa no debe preocuparse por eso después de eso. Si se refiere a cómo guardarlo para más adelante, desde fuera del programa, consulte el siguiente párrafo.

Por defecto, irán a su terminal, pero la salida se puede redirigir a otro lugar con algo como:

run_my_prog 2>error.out

Y, sí, la salida "screen" es una secuencia (o manejador de archivo), pero eso es generalmente solo porque stdout/cout y stderr/cerr están conectados a su "screen" por defecto. La redirección afectará esto como en el siguiente caso donde no se escribirá nada en su pantalla:

run_my_prog >/dev/null 2>&1

(a pesar de cosas complicadas como escribir directamente a /dev/tty). Ese fragmento redirigirá tanto la salida estándar como el error estándar para ir a la cubeta.

 36
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-08 01:37:12

¿Cuál es la diferencia entre ellos

stderr es un FILE*, y parte de la biblioteca estándar de c. cerr es un ostream, y parte de la biblioteca estándar de C++.

Además, la salida "screen" es en sí misma una ¿corriente derecha?

Sí, lo es. Pero en realidad hay dos flujos que escriben en la pantalla por defecto: stdout/cout es para la salida normal y stderr/cerr es para mensajes de error. Esto es útil para la redirección: Puede redirigir stdout a un archivo pero todavía tiene sus mensajes de error en la pantalla.

 7
Author: dan04,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-08 01:39:26