Ho modificato il listato di ieri utilizzando la popen. Ho però un problema strano nella copia del file .ps. Il file viene creato, quindi fino alla riga
Codice PHP:
fps=fopen(nome1,"w"); 
tutto dovrebbe essere ok. In seguito non viene copiato alcun carattere nel file .ps e il programma termina dando un errore stack smashing detected. Potreste per favore darmi qualche indicazione su come risolverlo?
Grazie
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
#define SIZE 100000
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");
    if((
pb=popen(rb,"r"))==NULL){
                     
printf("Errore popen non riuscita\n");
                     exit(-
2);
                    }    
           else{
//Sono nel processo padre
                 
if(pconvert=fork() < 0){//crea un processo per lanciare il comando convert
                        
printf("Fork per convert fallita\n");
                        exit(-
3);
                        }    
                     if(
pconvert == 0){//sono nel processo figlio per la conversione del file
                          
fps=fopen(nome1,"w");
                          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);
                           
execl("convert",nc,NULL);
          }
    
waitpid(pconvert,NULL,0);                  
    return 
0;
    }