barcode deve scrivere nella pipe e convert leggere, ma tu stai facendo il contrario

codice:
if ( pbarcode == 0 ) {
                  close(pb[0]); /* Chiudo in lettura */
                  dup2(pb[1], 1);
                  close(pb[1]);

                  execlp("barcode", "barcode", "-b", codice, "n", "-E", "-e", "ean", "-u", "mm", "-g", "60x25+1+1", NULL);
}
codice:
if ( pconvert == 0 ) {
                  close(pb[1]); /* Chiudo in scrittura */
                  dup2(pb[0], 0);
                  close(pb[0]);
                  execlp("convert", "convert", nome2, NULL);
}