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)
il comando convert anzichè convertirmi il file mi mostra il man, come se gli fossero passati dei parametri sbagliati.Codice PHP:printf("La riga di comando e' %s \n",nc);
execlp("convert",nc,NULL);
Il listato modificato è questo:
Ti prego di scusarmi per il disturbo. E' il primo programma nel quale uso le syscall e probabilmente qualcosa mi sfugge nei meccanismi.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;
}
Grazie.

Rispondi quotando