Ecco qua! Scusa menphisx spero di aver capito cosa intendessi spero che così vada un pò meglio.
Comunque mi sono accorto che nell'assegnazione di fin[icone].titolo = car; avevo messo time invece di car.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
// creo la struttura icone1 che appunto rapprensenta l'icone che vengono create
struct icone1 {
int ipid;
int titolo;
};
int main() {
char tasto[20];
int time;
int icone = 0;
char car [20];
int i;
int pid;
// definisco la struttura fin per la creazione delle icone
typedef struct icone1 fin;
fin finestre[10];
// in questo ciclo creo le 10 icone che devono apparire sullo schermo
while (icone<10){
// creo un processo figlio che esegue execlp per la visualizzazione delle icone
pid = fork();
icone++;
// qui ottengo il tempo casuale passato il quale si genera l'icona
time = rand() % 10;
// qui prendo il tempo casuale ottenuto prima e lo trasformo in una stringa che uso come titolo dell'icona
sprintf(car,"%i",time);
// visualizzo praticamente il titolo dell'icona anche se non serve a molto questa cosa
printf("lettera %s\n", car);
// qui metto nella struttura il pid del processo creato e il titolo dell'icona
fin[icone].ipid = pid;
fin[icone].titolo = car;
// metto un ritardo generico per dare un pò di tempo al giocatore di premere il tasto giusto ed eliminare un'icona
sleep(rand() % 15);
// all'interno del processo figlio creo l'icona tramite xterm
if (pid==0){
execlp("xterm","xterm","-iconic", "-n",time,0);
exit(0);
}
// nel processo padre verifico se è stato spinto il tasto giusto ed elimino la corrispondente icona
if (pid > 0){
scanf("%s", tasto);
for (i=0;i<=icone;i++){
printf("titolo %s\n", fin[i].titolo);
if (strcmp(tasto,fin[i].titolo) == 0){
kill(fin[i].ipid, SIGINT);
icone--;
}
}
}
}
}