Ti ringrazio per l'esempio. Adesso ho messo a posto la fork di troppo e anche il file .ps adesso è generato correttamente. Mi rimane però un problema. Pur venendo creato correttamente il file nome1 e pur essendo corretta la riga di comando che arriva alla execlp (ho messo una riga di controllo per verificarla)
Codice PHP:
printf("La riga di comando e' %s \n",nc);
execlp("convert",nc,NULL); 
il comando convert anzichè convertirmi il file mi mostra il man, come se gli fossero passati dei parametri sbagliati.
Il listato modificato è questo:
Codice PHP:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>

#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#define PERM 0777
main(){
    
char codice[13]; //il barcode è EAN 13
    
char nome[15],nome1[15],nome2[15];
    
char ext1[]=".ps";//Stringa per estensione .ps
    
char ext2[]=".bmp";//Stringa per estensione .bmp
    
FILE *pb;//Descrittore di file per la pipe convert | barcode
    
FILE *fps;//Descrittore del file .ps
    
char rb[]="barcode -b ";
    
int n;
    
pid_t pbarcode,pconvert,pelimina;//pid per il processo che lancia il comando barcode e per quello che lancia convert
    
printf("\nInserire il codice EAN\n");
    
scanf("%s"codice);
       
printf("\nInserire il nome del prodotto\n");
    
scanf("%s"nome);
    
strcpy(nome1,nome);
    
strcpy(nome2,nome);
    
strcat(nome1,ext1);
    
strcat(nome2,ext2);
    
strcat(rb,codice);
    
strcat(rb," n -E -e ean -u mm -g 60x25+1+1");
    
fps=fopen(nome1,"w");
    if((
pb=popen(rb,"r"))==NULL){
                     
printf("Errore popen non riuscita\n");
                     exit(-
2);
                    }    
                while((
n=fgetc(pb)) != EOF ){//Copia dalla pipe al file
                                 
fputc(n,fps);
                                 }
                          
pclose(pb);
                          
fclose(fps);
                          
//}
                          
char nc[]="convert ";//Stringa comando convert
                                 
strcat(nc,nome1);
                                 
strcat(nc," ");
                                 
strcat(nc,nome2);
                              
printf("La riga di comando e' %s \n",nc);
                           
execlp("convert",nc,NULL);          
    return 
0;
    } 
Ti prego di scusarmi per il disturbo. E' il primo programma nel quale uso le syscall e probabilmente qualcosa mi sfugge nei meccanismi.
Grazie.