Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: valen7valverde en 8 Mayo 2020, 04:31 am



Título: [C] Problema GNUPlot con código C
Publicado por: valen7valverde en 8 Mayo 2020, 04:31 am
Hola, compañerxs.

Estoy montando un programita muy sencillo que genera números aleatorios a través del algoritmo de Congruencia Lineal. El caso es que quiero graficar los puntos (que guardo en un fichero, previamente) con gnuplot. Cuando compilo y ejecuto el programa me aparece el siguiente error del que no he conseguido encontrar solución ni en stackoverflow ni en github.

[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
gnuplot: ../../src/xcb_io.c:259: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
Aborted (core dumped)

Este el el código del programa. Si alguien sabe algo le agradezco que me ayude.
Gracias de antemano.

Saludos!!!

Código
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "X11/Xlib.h"
  4.  
  5.  
  6.  
  7.  
  8. /*
  9.     Input:
  10.         - Semilla
  11.         - congruencia (c)
  12.         - constante multiplicativa
  13.         - constante incremento
  14.         - numero de terminos solicitados
  15. */
  16.  
  17. int main(int argc, char const *argv[])
  18. {
  19.    XInitThreads();
  20.  
  21.  
  22.    if(argc != 6){
  23.        printf("err: %s <seed> <mod> <a> <b> <N>\n", argv[0]);
  24.        exit(0);
  25.    }
  26.  
  27.  
  28.  
  29.    int term = atoi(argv[1]);
  30.    int mod  = atoi(argv[2]);
  31.    int a    = atoi(argv[3]);
  32.    int b    = atoi(argv[4]);
  33.    int N    = atoi(argv[5]);
  34.  
  35.  
  36.    FILE *f = fopen("out.out", "w");
  37.    for(int i=0; i<N;i++){
  38.  
  39.        term = (a*term + b) % mod;
  40.        fprintf(f, "%i\n", term);
  41.    }
  42.  
  43.    fclose(f);
  44.  
  45.    //Con popen ejecutamos comnados por la shell
  46.    FILE *gnuWindows = popen("gnuplot -persist", "w");
  47.    fprintf(gnuWindows, "%s\n", "plot 'out.out'");
  48.    // fprintf(gnuWindows, "%s\n", "set terminal png");
  49.    // fprintf(gnuWindows, "%s\n", "set output graf.png");
  50.    // fprintf(gnuWindows, "%s\n", "rep");
  51.    // fprintf(gnuWindows, "%s\n", "set terminal wxt");
  52.  
  53.    fclose(gnuWindows);
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.    return 0;
  61. }
  62.