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.