Come posso levare questi warning?
linea 38:[Warning] incompatible implicit declaration of built-in function 'exit' [enabled by default]
linea 87 :[Warning] passing argument 1 of 'execute' from incompatible pointer type [enabled by default]
linea 82 :[Warning] incompatible implicit declaration of built-in function 'exit' [enabled by default]
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>
#include <stddef.h>
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
void analizza(char *line, char **argv)
{
while (*line != '\0') { /* se la stringa presa in considerazione non rappresenta la fine della riga */
while (*line == ' ' || *line == '\n'){
*line = '\0'; /* sostituisci gli spazi con il carattere 0 */
line++;
}
*argv = line; /* save the argument position */
argv++;
while (*line != '\0' && *line != ' ' && *line != '\n')
line++; /* skip the argument until ... */
}
*argv = '\0'; /* mark the end of argument list */
}
void execute(char *argv) {
pid_t pid;
int stato, indice = 1;
int lunghNomeFile;
FILE *stream;
char nomeFile[15];
if ((pid = fork()) < 0) {
printf("*** ERRORE: creazione processo figlio fallita!\n");
exit(EXIT_FAILURE);
}
else {
if (pid == 0) { /* processo figlio */
if (execvp(*argv, argv) < 0) { /* esegue il comando */
printf("*** ERRORE: esecuzione fallita!\n"); /* perror("*** ERRORE esecuzione fallita"); */
exit(EXIT_FAILURE);
}
else
exit(EXIT_SUCCESS);
}
else {
/* processo padre */
while (getppid(wait(EXIT_SUCCESS || EXIT_FAILURE) != pid) ) /* aspetta il completamento del processo figlio */
lunghNomeFile = sprintf(nomeFile, "out.%d", &indice);
do {
stream = freopen(nomeFile, "w+", stdout); /* w+: apre il file in scrittura e lettura, creandolo se necessario oppure
troncando a 0 il suo contenuto se esisteva già */
printf("*** ERRORE in apertura del file!"); /* perror("*** ERRORE in apertura del file") */
} while (stream == NULL);
indice++;
fclose(stream);
}
}
}
void main(void) {
char line[1024]; /* input */
char *argv[64]; /* gli argomenti presenti nella linea di comando */
int continua=1;
while (continua) {
printf("Inserisci un solo comando da eseguire: ");
gets(line); /* leggi la linea di comando */
printf("\n");
analizza(line, argv); /* analizza line */
if (strcmp(argv[0], "exit") == 0) /* E' una "exit"? */
exit(0); /* esegui exit */
else {
if(strcmp(argv[0], "\0"))
continua=0; // oppure exit(0);
else
execute(argv); /* altrimenti esegui il comando */
}
}
}