Scusami se approfitto della tua gentilezza. Il codice è 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[14]; //il barcode è EAN 13
    
char nome[15],nome1[15],nome2[15];
    
char ext1[]=".ps";//Stringa per estensione .ps
    
char ext2[]=".jpg";//Stringa per estensione .jpg
    
FILE *pb;//Descrittore di file per la pipe convert | barcode
    
FILE *fps;//Descrittore del file .ps
    
FILE *fjpg;//Descrittore per il test dell'esistenza del file jpg
    
char rb[]="barcode -b ";
    
int n;//Variabile per la lettura caratteri dalla pipe
    
char e;//Variabile per controllo uscita finale
    
pid_t pconvert,pmostra;//pid per il processo che converte il file .ps e per il processo che lancia Image Viewer
    
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");
    
printf("rb %s \n",rb);
    
fps=fopen(nome1,"w");
    if((
pb=popen(rb,"r"))==NULL){
                     
printf("Errore popen non riuscita\n");
                     exit(-
1);
                    }    
                    while((
n=fgetc(pb)) != EOF ){//Copia dalla pipe al file
                                          
fputc(n,fps);
                                         }
                   
fclose(fps);
                   
pclose(pb);
    
pconvert=fork();//crea un processo per lanciare il comando convert e lasciare il processo padre aperto per eseguire i comandi successivi
    
if(pconvert 0){
              
printf("Fork per conversione file fallita\n");
              exit(-
2);
            }
    if(
pconvert == 0){//sono nel processo figlio per la conversione del file
              
execlp("convert","convert",nome1,nome2,NULL);
             }
    if(
pconvert>0){
               
wait(NULL);//sono nel processo padre e aspetto che termini la conversione
               
unlink(nome1);//Cancello il file .ps
               
pmostra=fork();//crea un processo per lanciare Image Viewer
               
if(pmostra 0){
                          
printf("Fork per Image Viewer fallita\n");
                          exit(-
3);
                       }
               if(
pmostra == 0){//sono nel processo figlio per il lancio dell'applicazione gimp
                    
fjpg=fopen(nome2,"rb");
                    if(
fjpg == NULL){
                                   
printf("Errore, conversione a jpg non riuscita\n");
                                   exit(-
4);
                                    }
                    
fclose(fjpg);
                                
execlp("gpicview","gpicview",nome2,NULL);//lancia l'apertura del nuovo file con Image Viewer
                               
}                    
               if(
pmostra>0){
                     
printf("Premere il tasto e per chiudere Image Viewer e uscire\n");
                     while(
!= 'e'){
                             
scanf("%c",&e);
                            }
                          }
            }
        
kill(pmostra,SIGTERM);//Termina Image Viewer
        
wait(NULL);//Aspetta la fine di tutti i processi figli
        
return 0;
        } 
L'istruzione forse più sospetta potrebbe essere la copia di caratteri del file postscript eseguita dalla pipe. Però il file viene convertito ed eliminato correttamente, il che mi fa pensare che l'istruzione sia corretta.