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;
}