c++ - archivos - Redirigir FROM stderr a otro descriptor de archivo
stdout java (2)
Mi programa llama a las funciones de la biblioteca que imprimen en stderr. Quiero intervenir para que todas las llamadas de escritura al descriptor de archivo n. ° 2 sean enviadas a otro lugar.
Aqui esta mi primer intento:
bool redirect_stderr (int fd)
{
return dup2 (2, fd) > 0;
}
Aquí, fd se obtuvo con éxito desde open("/foo/bar",O_APPEND|O_CREAT)
Después de que esta función devuelve verdadero, std::cerr<<"blah"
va al terminal y no al archivo.
¿Qué estoy haciendo mal?
Gracias.
ACTUALIZAR
Gracias, Larsmans, pero todavía no estoy allí ...
void redirect_stderr_to (const char * output_file)
{
int fd = open (output_file, O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
if (fd < 0) {
throw RUNTIME_ERROR;
}
else {
if (-1 == dup2 (fd, STDERR_FILENO))
throw RUNTIME_ERROR;
std :: cout << (std::cerr ? "Fine/n" : "Bad/n");
char x [100];
std :: cerr
<< "Output to " << getcwd (x, 100) << " / " << output_file
<< " yields " << fd << " errno: " << errno << "/n";
std :: cout << (std::cerr ? "Fine/n" : "Bad/n");
}
}
Estas salidas
Fine
Bad
a stdout y el archivo dado está vacío. (Se crea correctamente si no existe).
Invertiste los argumentos: es
dup2(from_fd, to_fd)
es decir
dup2(fd, 2)
(vea POSIX.2008 o sus páginas de manual).
Solo para completar: incluso podría alcanzar su objetivo con freopen(name, mode, stderr)
, que es una función estándar / ANSI / ISO C89 y C99.