Buenas de nuevo grupo.
Os adjunto el codigo de mi shell. Lo he probado en el ordenador dnd debe
funcionar que es un IRIX y la funcion strtok no la soporta me da
warnings al compilar y al ejecutar introduzco cualquier palabra y me
pone Segmentation fault.
Podeis echarme un mano?
Saludos
===========================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BLANCO " "
#define FIN "FIN"
int hayAmpersand(char cadena[]);
int main (int argc, char *argv[]) {
char comando[]="";
char ruta[5]="/bin/"; // No se puede cambiar de sitio
char resultado[]="";
char *resultado2[25];
int e, i, ampersand;
pid_t hijo, hijoMuerto;
while(1) {
// Vacio las cadenas al inicio de cada bucle
comando[0] = '\0';
resultado[0] = '\0';
resultado[1] = '\0';
resultado2[0] = '\0';
ampersand = 0;
printf("#@> ");
scanf("\n%[^\n]", comando);
if (strcmp(comando, FIN) == 0) return(0); // Si son iguales sale del
programa
if (hayAmpersand(comando) == 1) ampersand = 1;
// Convertimos una ruta relativa en absoluta
if (strncmp(comando, ruta, 5) == 0) {
strcat(resultado, comando);
} else {
strcat(resultado, ruta);
strcat(resultado, comando);
}
// printf("\nCCC %s.\n", comando);
//== Cadenas ==========================================================
// Sacamos la primera palabra de la cadena
resultado2[0] = strtok(resultado, BLANCO);
// Sacamos la otras palabras de la cadena
i=1;
while((resultado2[i] = strtok(NULL, BLANCO)) != NULL) i++;
//== Fin Cadenas ======================================================
hijo=fork();
switch (hijo) {
case -1:
perror("ERROR!");
exit(-1);
case 0:
execvp(resultado2[0], &resultado2[0]);
perror("ERROR!");
exit(e);
default:
if (ampersand != 1) {
WEXITSTATUS(e);
hijoMuerto=wait(&e);
printf("\nHOlaaaa\n");
// exit(0);
}
}
}
return (0);
}
int hayAmpersand(char cadena[]) {
int j=0;
int hay=0;
for (j=0; j<=strlen(cadena); j++) {
if (cadena[j] == '&') {
cadena[j] = cadena[j+1];
hay=1;
return(hay);
}
}
return(hay);
}
===========================================================