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 rigatutto 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?Codice PHP:fps=fopen(nome1,"w");
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;
}

Rispondi quotando