En realidad tengo una solución a este problema, pero me pregunto si hay uno más liviano.¿Cómo suprimo la salida mientras uso una biblioteca dinámica?
Tengo la necesidad de cargar en una biblioteca a mi utilidad usando dlopen
y luego llamar a una de las funciones.
Desafortunadamente, la función arroja una gran cantidad de información en STDOUT y esto no quiero.
Tengo una solución que no es portátil y me pregunto si existe una solución mejor y más genérica que pueda utilizar.
Esto es lo que tengo (NB : Este es C):
/*
* Structure for retaining information about a stream, sufficient to
* recreate that stream later on
*/
struct stream_info {
int fd;
fpos_t pos;
};
#define STDOUT_INFO 0
#define STDERR_INFO 1
struct stream_info s_info[2];
point_stream_to_null(stdout, &s_info[STDOUT_INFO]);
point_stream_to_null(stderr, &s_info[STDERR_INFO]);
void *output = noisy_function();
reset_stream(stderr, &s_info[STDERR_INFO]);
reset_stream(stdout, &s_info[STDOUT_INFO]);
/*
* Redirects a stream to null and retains sufficient information to restore the stream to its original location
*** NB ***
* Not Portable
*/
void point_stream_to_null(FILE *stream, struct stream_info *info) {
fflush(stream);
fgetpos(stream, &(info->pos));
info->fd = dup(fileno(stream));
freopen("/dev/null", "w", stream);
}
/*
* Resets a stream to its original location using the info provided
*/
void reset_stream(FILE *stream, struct stream_info *info) {
fflush(stream);
dup2(info->fd, fileno(stream));
close(info->fd);
clearerr(stream);
fsetpos(stream, &(info->pos));
}
¿Alguna sugerencia?
Windows o Unix? – Spaceghost
buscando una solución portátil. Lo que tengo está bien para Unix. – Dancrumb