SlideShare una empresa de Scribd logo
ESCUELA POLITÉCNICA NACIONAL
              CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                     SISTEMAS OPERATIVOS
                                                                    NOMBRE: Alexander Pinchao
                                        INFORME
Programa para una mini Shell

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<sys/mman.h>
#include<pthread.h>
#include<semaphore.h>
#include<sys/file.h>
#include<time.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<sys/times.h>
#include<sys/time.h>
#include<unistd.h>

externint fork();
externint pipe();

/* Define constante nominada*/
#define PROMPT "veroshell@vero-linux:$ "
#define ESPACIO   ' '
#define TUBERIA '|'
#define ENTRADA '<'
#define SALIDA '>'
#define ERROR "&>"
#define VARIABLE '='
#define EXIT 'e'
#define INGRESO 'i'
#define DOLAR '$'
#define BACKGROUND '&'


#define   MAX_BUF 1024
#define   MAX_COMMS 32
#define       MAX_ARGS 32
#define   TAMANYO_ALM 1024
#define   TB 1024
#define   ESPERA 1000

char buf[TB];
char *bp;
int lver=0, larchivo=1, i, lineas=0, desplazamiento=0;
int archivo,bytesleidos;
int arrange (char *buffer) {
int i = 0, j = 0;
while (buffer[i]) {
ESCUELA POLITÉCNICA NACIONAL
            CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                   SISTEMAS OPERATIVOS
                                                                  NOMBRE: Alexander Pinchao
while (buffer[i] == ESPACIO) i++;
while ((buffer[i] != ESPACIO) && buffer[i])
       buffer[j++] = buffer[i++];
if (! buffer[i]) {
if (buffer[i-2] == ESPACIO)
       buffer[j-2] = '0';
else buffer[j-1] = '0';
     }
else
       buffer[j++] = ESPACIO;
  }
return j;
}
int makeargs (char * buffer, char * args[]) {
int i = 0;
char * puntero = buffer;
args[i++] = puntero;
while (puntero = strchr(puntero, ESPACIO)) {
     *puntero++ = '0';
     args[i++] = puntero;
}
  args[i] = NULL;
return i;
}
int environment (char * buffer, char * env[]) {
char *puntero = buffer;

if (puntero = strchr(puntero, INGRESO)) {
    *puntero++ = '0';
    env[0] = buffer;
env[1] = puntero;
return 1;
  }
return 0;
}
int background (char * buffer) {
char *puntero = buffer;
if (puntero = strchr(puntero, BACKGROUND)) {
    *puntero--;
*puntero = '0';
return 1;
  }
return 0;
}
int main( int argc, char *argv[] ) {
      int continuar;
      int ingreso;
#ifdef DEBUG
int i;
#endif
char buffer[MAX_BUF], *puntero, value[MAX_BUF], *args[MAX_ARGS],
*comms[MAX_COMMS];
int j = 0, k = 0, pid = 0, numargs = 0, actual = 0, anterior = 0, t1[2],
t2[2];
  printf("nMinishell de sistemas Operativos");
  printf("nn");
ESCUELA POLITÉCNICA NACIONAL
           CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                  SISTEMAS OPERATIVOS
                                                                 NOMBRE: Alexander Pinchao
      do{
       printf(PROMPT);
      printf("n          MENU");
      printf("n    1. Procesos en abanico");
      printf("n    2. Semaforos");
      printf("n    3. Creacion de archivos");
      printf("n    4. Copia de un archivo a otro");
      printf("n    5. Vector usando lseek");
      printf("n    6. Comando tail");
      printf("n    7. Pipes");
      printf("n    8. Tuberias");
      printf("n    9. Hora del sistema");
      printf("n    10. Tiempo en modo usuario");
      printf("n    11. Comandos");
      printf("n Ingrese la opcion a realizar: ");
      scanf("%i",&ingreso);
if(ingreso==11){
while(1) {
    printf(PROMPT);
if (fgets(buffer, MAX_BUF, stdin) == NULL)
continue;
    arrange(buffer);

#ifdef DEBUG
      printf("Entrada: #%s#n", buffer);
      i = 0;
#endif
if (environment(buffer, args)) {
//setenv(args[0], args[1], 1); =
      exit(0);
    }
elseif (background(buffer)) {
if (fork() == 0) {
      pid = fork();
      if (pid) {
      wait(NULL);
         printf("Proceso terminado con PID=%dn", pid);
      printf(PROMPT);
         exit(0);
      }
      else {
         execlp(buffer, buffer, NULL);
      perror("Error de ejecucion de execvpn");
      exit(0);
      }
       }
    }
elseif (fork()) wait(NULL);
else {
       numargs = makeargs(buffer, args);

while (args[j] != NULL) {

#ifdef DEBUG
      printf(" #%s#n", args[j]);
      #endif
ESCUELA POLITÉCNICA NACIONAL
             CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                    SISTEMAS OPERATIVOS
                                                                   NOMBRE: Alexander Pinchao
      if (args[j][0] == DOLAR) {
         strcpy(value, getenv(++args[j]));
         args[j] = value;
      }
      if (*args[j] == '|') {
      args[j] = NULL;
         anterior = actual;
         actual = j+1;
      pipe(t1);
      #ifdef DEBUG
         printf("t1[0] = %d, t1[1] = %dn", t1[0], t1[1]);
         printf("t2[0] = %d, t2[1] = %dn", t2[0], t2[1]);
      printf("Anterior %dn", anterior);
      printf("Actual %dn", actual);
      #endif
      if (fork() == 0) {
      if (anterior != 0) {
              close(t1[0]); close(t2[1]);
              close(0); dup(t2[0]);
              close(1); dup(t1[1]);
              close(t1[1]); close(t2[0]);
           }
      else {
              close(t1[0]);
              close(1); dup(t1[1]);
              close(t1[1]);
           }
           execvp(args[anterior], &args[anterior]);
      perror("Error de execvpn");
      exit(0);
         }
      else wait(NULL);
                t2[0] = t1[0];
         t2[1] = t1[1];
      }
      j++;
       }
#ifdef DEBUG
       printf("t1[0] = %d, t1[1] = %dn", t1[0], t1[1]);
       printf("t2[0] = %d, t2[1] = %dn", t2[0], t2[1]);
#endif
       close(t2[1]);
       close(0); dup(t2[0]);
       close(t2[0]);
#ifdef DEBUG
       printf("actual %dn", actual);
#endif
       execvp(args[actual], &args[actual]);
perror("Error de execvpn");
exit(0);
    }
}
}
elseif(ingreso==1){
      pid_t pid;
int i;
ESCUELA POLITÉCNICA NACIONAL
             CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                    SISTEMAS OPERATIVOS
                                                                   NOMBRE: Alexander Pinchao
int n = 4;

   printf ("nA partir de un proceso padre se crea un abanico de
procesosn");

for (i = 0; i < n; i++)
   {
       pid = fork();
if (pid == 0)
break;
   }
   printf("El padre del proceso %d es %dn", getpid(), getppid());
   exit(0);
}
elseif(ingreso==2){
      int pid_p; /* identifica el proceso hijo */
      int mutex; /* semaforo binario */
      mutex=inicia(1);
      if (0==(pid_p=fork()))
             proceso_hijo(mutex);
      else
             proceso_padre(mutex);
             borra_s(mutex);
}
elseif(ingreso==3){
      int fd_archivo;
      int escrito=0;
      int aux=0;
      int longitud=5;
      char datos[]="Prueba";
      fd_archivo=creat("Ejemplo",0644);

             if(fd_archivo==-1)
             {

                     perror("Archivo no creado");
             }
     else
             printf("Archivo creado");

     while(escrito<longitud)
     {
           aux=write(fd_archivo, datos+escrito, longitud-escrito);
           if(aux>0)
                 escrito=escrito+aux;
}
close(fd_archivo);
}
elseif(ingreso==4){
      int   fd_ent, fd_sal;                /* identificadores de archivos */
      char almacen[TAMANYO_ALM];           /* almacen de E/S */
      int   n_read;                        /* contador de E/S */

     /* Abrir el archivo de entrada */
     fd_ent = open ("Ejemplo", O_RDONLY);
     if (fd_ent < 0)
ESCUELA POLITÉCNICA NACIONAL
           CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                  SISTEMAS OPERATIVOS
                                                                 NOMBRE: Alexander Pinchao
     {
           perror ("open");
           exit (-1);
     }
     /* Crear el archivo de salida. Modo de protección: rw-r--r--*/
     fd_sal = creat ("archivo_salida", 0644);
     if (fd_sal < 0)
     {
           perror ("creat");
           exit (-1);
     }
     /* Bucle de lectura y escritura */
     while ((n_read = read (fd_ent, almacen, TAMANYO_ALM)) >0 )
     {

           if (write (fd_sal, almacen, n_read) < n_read)
           {
                 perror ("write");
                 close (fd_ent);
                 close (fd_sal);
                 exit (-1);
           }
     }
     if (n_read < 0)
     {
           perror ("read");
           close (fd_ent);
           close (fd_sal);
           exit (-1);
     }
     printf("El archivo copiado correctamente en archivo_salida");
     close (fd_ent);
     close (fd_sal);
}
elseif(ingreso==5){
      int fd_archivo;
      int numero;
      int longitud=10;
      char datos1[]="ABCDEFGHIJ";
      char datos2[]="abcdefghij";
      fd_archivo=creat("Vectores",0644);

           if(fd_archivo==-1)
                 {

                 perror("No se Puede Crear el Archivo");
               }
     write(fd_archivo, datos1, longitud);
     numero= lseek(fd_archivo, 1024,SEEK_SET);
     write(fd_archivo, datos2, longitud);
     numero=lseek(fd_archivo, numero+1024,SEEK_SET);
     write(fd_archivo, datos1, longitud);
     printf("Archivo escrito con los vectores correctamente");

close(fd_archivo);
ESCUELA POLITÉCNICA NACIONAL
           CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                  SISTEMAS OPERATIVOS
                                                                 NOMBRE: Alexander Pinchao
}
elseif(ingreso==6){
      archivo=open("Leer", O_RDONLY);
      while(bytesleidos = read(archivo, buf, TB))//Cuento cuantas lineas
tiene mi archivo
      {
            for(i=0; i<= 1024; i++)
            {
                  if(buf[i] == 'n')
                        larchivo++;
            }
      if(bytesleidos == -1)
            break;
      }
      close(archivo);

     printf ("nComando tailn nn");
     printf("lineas para ver:");
     scanf("%d",&lver);

     if(lver >= larchivo)
       lver = 0;
     else{
     while(bytesleidos = read(archivo,buf, 1024))
       {
           for(i=0; i <= 1024; i++)
           {
                 if(buf[i] != 'n')
                       desplazamiento++;
                 else{
                       desplazamiento++;
                       lineas++;
                 }
                 if(lineas == larchivo - lver - 1)
                       break;
           }
           if(bytesleidos == -1)
           break;
       }
     close(archivo);
     }

     archivo = open("Leer", O_RDONLY);
     lseek(archivo, desplazamiento, SEEK_SET);
     while(bytesleidos = read(archivo, buf, TB))
     {
     if(bytesleidos == -1)
           break;
       write(0, buf, bytesleidos);
     }
     close(archivo);
     printf("n");
}
elseif(ingreso==7){
      int fd[2];
      char mensaje[] = "nMensaje enviado a hijo por Veron";
ESCUELA POLITÉCNICA NACIONAL
           CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                  SISTEMAS OPERATIVOS
                                                                 NOMBRE: Alexander Pinchao
      char buffer[40];
      pipe(fd);
      pid_t hijo;
      if((hijo = fork())<0)
      {
            perror("No se puede crear el proceson");
            exit(1);
      }
      if(hijo!= 0)
      {
            close(fd[0]);
            write(fd[1],mensaje,strlen(mensaje));
      }
      else
      {
            close(fd[1]);
            read(fd[0],buffer,sizeof(buffer));
            printf("nLo que se envio por el pipe es: %s",buffer);
      }
      return(0);
}
elseif(ingreso==8){
      int fd1[2];
pid_t pid;

/* se crea la tuberia */
if (pipe(fd1) < 0) {
                 perror("Error al crear la tuberia");
exit(0);
         }
         pid = fork();
switch (pid) {
case -1:    /* error */
                         perror("Error en el fork");
                         exit(0);
case 0:     /* proceso hijo ejecuta ls */
close(fd1[0]);
                         close(STDOUT_FILENO);
                         dup(fd1[1]);
                         close(fd1[1]);
                         execlp("ls", "ls", NULL);
perror("Error en el exec");
break;
default:     /* proceso padre ejecuta wc */
close(fd1[1]);
                         close(STDIN_FILENO);
                         dup(fd1[0]);
                         close(fd1[0]);
                         execlp("wc", "wc", NULL);
perror("Error en el exec");
}
}
elseif(ingreso==9){
      time_t tiempo;
      struct tm *fecha;
ESCUELA POLITÉCNICA NACIONAL
          CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                 SISTEMAS OPERATIVOS
                                                                NOMBRE: Alexander Pinchao
     tiempo= time(NULL);
     fecha= localtime(&tiempo);
     /* hay que ajustar el año ya que lo devuelve respecto a 1900 */
     printf ("%02d/%02d/%04d %02d:%02d:%02dn",
           fecha->tm_mday, fecha->tm_mon,
           fecha->tm_year+1900, fecha->tm_hour,
           fecha->tm_min, fecha->tm_sec);
}
elseif (ingreso==10){
      struct tms InfoInicio, InfoFin;
      clock_t t_inicio, t_fin;
      long tickporseg;

     if (argc<2) {
           fprintf(stderr, "Uso: %s programa [args]n", argv[0]);
           exit(1);
     }


     tickporseg= sysconf(_SC_CLK_TCK);

     t_inicio= times(&InfoInicio);

     if (fork()==0) {
           execvp(argv[1], &argv[1]);
           perror("error ejecutando el programa");
           exit(1);
     }
     wait(NULL);
     t_fin= times(&InfoFin);
     printf ("Tiempo real: %7.2fn",
           (float)(t_fin - t_inicio)/tickporseg);

      printf ("Tiempo de usuario: %7.2fn",
            (float)(InfoFin.tms_cutime -
InfoInicio.tms_cutime)/tickporseg);
      printf ("Tiempo de sistema: %7.2fn",
            (float)(InfoFin.tms_cstime -
InfoInicio.tms_cstime)/tickporseg);
}
printf("n Desea continuar:   1   0n");
scanf("%d", &continuar);
}//do

while(continuar==1);
}


proceso_hijo(critica)
int critica;
{
      int i,j;
      for (i=0;i< 5; i++)
      {
            P(critica);
            printf("Soy el proceso Hijo en el turno %d", i);
ESCUELA POLITÉCNICA NACIONAL
            CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                   SISTEMAS OPERATIVOS
                                                                  NOMBRE: Alexander Pinchao
             fflush(stdout); //Limpia el buffer de teclado
             retardo ();
             printf("n");
             V(critica);
     }
     exit(1);
}

proceso_padre(critica)
int critica;
{
      int i,j;
      for (i=0;i< 5; i++)
      {
            P(critica);
            printf("Soy el proceso Padre en el turno %d", i);
            fflush (stdout); //Limpia el buffer de teclado
            retardo ();
            printf("n");
            V(critica);
      }

     wait(0); /* espera a que finalice el hijo */
}

retardo()
{

     struct timeval tiempo;
     struct timezone tz;
     unsignedlong inicio, ahora;
     gettimeofday(&tiempo, &tz);
     ahora = inicio = tiempo.tv_sec * 1000000 + tiempo.tv_usec;
     // ESPERA microsegs
     while (ahora < inicio + ESPERA)
     {
           gettimeofday(&tiempo, &tz);
           ahora = tiempo.tv_sec * 1000000 + tiempo.tv_usec;
     }
}

inicia(valor)
int valor;
{
      int semval;
      int id;
      union semun
      {
            int val;
            struct semid_ds *buf;
            ushort *array;
      } arg;

     //Permisos del semaforo creado
     if ((id=semget(IPC_PRIVATE, 1, (IPC_CREAT|0666))) == -1)
     {
ESCUELA POLITÉCNICA NACIONAL
            CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                                   SISTEMAS OPERATIVOS
                                                                  NOMBRE: Alexander Pinchao

            perror("Error al crear semaforo.");

            return(-1);
      }
      arg.val = valor;
      if (semctl(id, 0, SETVAL, arg) == -1)
      {
            perror("Error al inicializar semaforo.");
            return (-1); /*error en inicializacion*/
      }
      return(id);
}
/*Rutina P */
P(semaforo)
int semaforo;
{
      if ( semcall(semaforo, -1) == -1 )
            perror("Error");
}

/*Rutina V */
V(semaforo)
int semaforo;
{
      if ( semcall(semaforo, 1) == -1 )
            perror("Error");
}
semcall(semaforo, operacion)
int semaforo, operacion;
{
      struct sembuf sb;
      sb.sem_num = 0;
      sb.sem_op = operacion;
      sb.sem_flg = 0;
      return ( semop(semaforo, &sb, 1) ); /*devuelve -1 si error */
}
borra_s(semaforo)
int semaforo;
{
      if ( semctl(semaforo, 0, IPC_RMID, 0) == -1)
      {
            perror("Error");
            return(-1);
      }
}

CAPTURAS:
ESCUELA POLITÉCNICA NACIONAL
CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                       SISTEMAS OPERATIVOS
                                                      NOMBRE: Alexander Pinchao
ESCUELA POLITÉCNICA NACIONAL
CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN
                       SISTEMAS OPERATIVOS
                                                      NOMBRE: Alexander Pinchao

Más contenido relacionado

La actualidad más candente

Ejemplos Importantisimo
Ejemplos  ImportantisimoEjemplos  Importantisimo
Ejemplos Importantisimomartha leon
 
Practicas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaPracticas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaDariio Lopezz Young
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.jubacalo
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iteratorjubacalo
 
Lenguaje de raptor, c# y java
Lenguaje de raptor, c# y javaLenguaje de raptor, c# y java
Lenguaje de raptor, c# y java
ariannalizeeth
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
Amado Arcaya
 
Java HashMap
Java HashMapJava HashMap
Java HashMapjubacalo
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threadsjubacalo
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
jubacalo
 
Codificaciones c++2011
Codificaciones c++2011Codificaciones c++2011
Codificaciones c++2011mario_10
 
Shell
ShellShell
Lab
LabLab
Lab
yito24
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
 
Programacion en python_2
Programacion en python_2Programacion en python_2
Programacion en python_2
wozgeass
 

La actualidad más candente (16)

Ejemplos Importantisimo
Ejemplos  ImportantisimoEjemplos  Importantisimo
Ejemplos Importantisimo
 
Practicas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaPracticas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzada
 
Ahorcado
AhorcadoAhorcado
Ahorcado
 
Código fuente guitarra
Código fuente guitarraCódigo fuente guitarra
Código fuente guitarra
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iterator
 
Lenguaje de raptor, c# y java
Lenguaje de raptor, c# y javaLenguaje de raptor, c# y java
Lenguaje de raptor, c# y java
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
 
Java HashMap
Java HashMapJava HashMap
Java HashMap
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
Codificaciones c++2011
Codificaciones c++2011Codificaciones c++2011
Codificaciones c++2011
 
Shell
ShellShell
Shell
 
Lab
LabLab
Lab
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Programacion en python_2
Programacion en python_2Programacion en python_2
Programacion en python_2
 

Destacado

Signposting For Spinal Injury & Pain John ODowd,
Signposting For Spinal Injury & Pain John ODowd,Signposting For Spinal Injury & Pain John ODowd,
Signposting For Spinal Injury & Pain John ODowd,chrischristouability
 
Administración de sistemas linux
Administración de sistemas linuxAdministración de sistemas linux
Administración de sistemas linux
Alex Pin
 
Ectopic pregnancy piyush giri
Ectopic pregnancy piyush giriEctopic pregnancy piyush giri
Ectopic pregnancy piyush giri
Piyush Giri
 
manufactura inteligente
manufactura inteligentemanufactura inteligente
manufactura inteligenteAlex Pin
 
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanosColeta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
Henrique Matheus
 

Destacado (6)

Signposting For Spinal Injury & Pain John ODowd,
Signposting For Spinal Injury & Pain John ODowd,Signposting For Spinal Injury & Pain John ODowd,
Signposting For Spinal Injury & Pain John ODowd,
 
Administración de sistemas linux
Administración de sistemas linuxAdministración de sistemas linux
Administración de sistemas linux
 
Antonis kypridemos test
Antonis kypridemos testAntonis kypridemos test
Antonis kypridemos test
 
Ectopic pregnancy piyush giri
Ectopic pregnancy piyush giriEctopic pregnancy piyush giri
Ectopic pregnancy piyush giri
 
manufactura inteligente
manufactura inteligentemanufactura inteligente
manufactura inteligente
 
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanosColeta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
Coleta seletiva, reciclagem e compostagem de resíduos sólidos urbanos
 

Similar a Informe minishell

7... automata de pila
7... automata de pila7... automata de pila
7... automata de pila
Jacqui Venegas
 
Informe tecnico
Informe tecnicoInforme tecnico
Jorge informe tecnico
Jorge informe tecnicoJorge informe tecnico
Jorge informe tecnico
Jorge Ake Pech
 
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
Videoconferencias UTPL
 
Coloreo
ColoreoColoreo
ColoreoJorge
 
Corridas de los ejercicios ya realizados
Corridas de los ejercicios ya realizadosCorridas de los ejercicios ya realizados
Corridas de los ejercicios ya realizadosdiegorap
 
Deber de programación
Deber de programación  Deber de programación
Deber de programación
legnasilvana
 
informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento- informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento-
Eliu Osseas Puc Puc
 
Unidad16 Codigof1
Unidad16 Codigof1Unidad16 Codigof1
Unidad16 Codigof1martha leon
 
Taller II Coreis Python 13112009
Taller II Coreis Python 13112009Taller II Coreis Python 13112009
Taller II Coreis Python 13112009
Carlos Cardenas Fernandez
 
Ej1 t2 l3-1
Ej1 t2 l3-1Ej1 t2 l3-1
Ej1 t2 l3-1
jvidalcc
 
Informe metodos de ordenamiento
Informe metodos de ordenamientoInforme metodos de ordenamiento
Informe metodos de ordenamiento
eliezerbs
 

Similar a Informe minishell (20)

7... automata de pila
7... automata de pila7... automata de pila
7... automata de pila
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Informe tecnico
Informe tecnicoInforme tecnico
Informe tecnico
 
Jorge informe tecnico
Jorge informe tecnicoJorge informe tecnico
Jorge informe tecnico
 
Programacion 55
Programacion 55Programacion 55
Programacion 55
 
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
 
Coloreo
ColoreoColoreo
Coloreo
 
Corridas de los ejercicios ya realizados
Corridas de los ejercicios ya realizadosCorridas de los ejercicios ya realizados
Corridas de los ejercicios ya realizados
 
Deber de programación
Deber de programación  Deber de programación
Deber de programación
 
informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento- informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento-
 
criptografiaV1
criptografiaV1criptografiaV1
criptografiaV1
 
Unidad16 Codigof1
Unidad16 Codigof1Unidad16 Codigof1
Unidad16 Codigof1
 
Taller II Coreis Python 13112009
Taller II Coreis Python 13112009Taller II Coreis Python 13112009
Taller II Coreis Python 13112009
 
Programacion
ProgramacionProgramacion
Programacion
 
Programaswin32c++
Programaswin32c++Programaswin32c++
Programaswin32c++
 
Ej1 t2 l3-1
Ej1 t2 l3-1Ej1 t2 l3-1
Ej1 t2 l3-1
 
Practicas de programacion 11 20
Practicas de programacion 11 20Practicas de programacion 11 20
Practicas de programacion 11 20
 
Informe metodos de ordenamiento
Informe metodos de ordenamientoInforme metodos de ordenamiento
Informe metodos de ordenamiento
 

Más de Alex Pin

Configuracion de redes vlan
Configuracion de redes vlanConfiguracion de redes vlan
Configuracion de redes vlan
Alex Pin
 
Agenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAgenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAlex Pin
 
ingeniera social
ingeniera socialingeniera social
ingeniera social
Alex Pin
 
Ingeniera social carlosbiscione
Ingeniera social carlosbiscioneIngeniera social carlosbiscione
Ingeniera social carlosbiscione
Alex Pin
 
programación en prolog
programación en prologprogramación en prolog
programación en prolog
Alex Pin
 
seguridad informática
seguridad informáticaseguridad informática
seguridad informática
Alex Pin
 
LISP
LISP LISP
LISP
Alex Pin
 
Introducción a la_neuro_computación
Introducción a la_neuro_computaciónIntroducción a la_neuro_computación
Introducción a la_neuro_computación
Alex Pin
 
Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source
Alex Pin
 
Analisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazasAnalisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazas
Alex Pin
 
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Alex Pin
 
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSDescripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSAlex Pin
 
Trabajo symbian
Trabajo symbianTrabajo symbian
Trabajo symbianAlex Pin
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoiAlex Pin
 
Arboles avl
Arboles avlArboles avl
Arboles avlAlex Pin
 
Tutorial perl en linux
Tutorial perl en linuxTutorial perl en linux
Tutorial perl en linux
Alex Pin
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y ColasAlex Pin
 
Sic414 ii-07.04.13-2
Sic414 ii-07.04.13-2Sic414 ii-07.04.13-2
Sic414 ii-07.04.13-2Alex Pin
 

Más de Alex Pin (19)

Configuracion de redes vlan
Configuracion de redes vlanConfiguracion de redes vlan
Configuracion de redes vlan
 
Agenda de Datos Personales en LISP
Agenda de Datos Personales en LISPAgenda de Datos Personales en LISP
Agenda de Datos Personales en LISP
 
ingeniera social
ingeniera socialingeniera social
ingeniera social
 
Ingeniera social carlosbiscione
Ingeniera social carlosbiscioneIngeniera social carlosbiscione
Ingeniera social carlosbiscione
 
programación en prolog
programación en prologprogramación en prolog
programación en prolog
 
seguridad informática
seguridad informáticaseguridad informática
seguridad informática
 
LISP
LISP LISP
LISP
 
Introducción a la_neuro_computación
Introducción a la_neuro_computaciónIntroducción a la_neuro_computación
Introducción a la_neuro_computación
 
Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source Catedral y bazar una visión analítica de la técnica de desarrollo open source
Catedral y bazar una visión analítica de la técnica de desarrollo open source
 
Analisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazasAnalisis y-modelado-de-amenazas
Analisis y-modelado-de-amenazas
 
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
Comparacion de las estructuras de bloque de los sistemas operativos symbian, ...
 
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRSDescripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
Descripcion del S.O. Symbian para el desarrollo de aplicaciones en la red GPRS
 
Trabajo symbian
Trabajo symbianTrabajo symbian
Trabajo symbian
 
Torres de hanoi
Torres de hanoiTorres de hanoi
Torres de hanoi
 
Arboles avl
Arboles avlArboles avl
Arboles avl
 
NASM
NASM NASM
NASM
 
Tutorial perl en linux
Tutorial perl en linuxTutorial perl en linux
Tutorial perl en linux
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 
Sic414 ii-07.04.13-2
Sic414 ii-07.04.13-2Sic414 ii-07.04.13-2
Sic414 ii-07.04.13-2
 

Último

Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
44652726
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
JuanPrez962115
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 

Último (20)

Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 

Informe minishell

  • 1. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao INFORME Programa para una mini Shell #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include<sys/wait.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<errno.h> #include<sys/mman.h> #include<pthread.h> #include<semaphore.h> #include<sys/file.h> #include<time.h> #include<sys/ipc.h> #include<sys/sem.h> #include<sys/times.h> #include<sys/time.h> #include<unistd.h> externint fork(); externint pipe(); /* Define constante nominada*/ #define PROMPT "veroshell@vero-linux:$ " #define ESPACIO ' ' #define TUBERIA '|' #define ENTRADA '<' #define SALIDA '>' #define ERROR "&>" #define VARIABLE '=' #define EXIT 'e' #define INGRESO 'i' #define DOLAR '$' #define BACKGROUND '&' #define MAX_BUF 1024 #define MAX_COMMS 32 #define MAX_ARGS 32 #define TAMANYO_ALM 1024 #define TB 1024 #define ESPERA 1000 char buf[TB]; char *bp; int lver=0, larchivo=1, i, lineas=0, desplazamiento=0; int archivo,bytesleidos; int arrange (char *buffer) { int i = 0, j = 0; while (buffer[i]) {
  • 2. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao while (buffer[i] == ESPACIO) i++; while ((buffer[i] != ESPACIO) && buffer[i]) buffer[j++] = buffer[i++]; if (! buffer[i]) { if (buffer[i-2] == ESPACIO) buffer[j-2] = '0'; else buffer[j-1] = '0'; } else buffer[j++] = ESPACIO; } return j; } int makeargs (char * buffer, char * args[]) { int i = 0; char * puntero = buffer; args[i++] = puntero; while (puntero = strchr(puntero, ESPACIO)) { *puntero++ = '0'; args[i++] = puntero; } args[i] = NULL; return i; } int environment (char * buffer, char * env[]) { char *puntero = buffer; if (puntero = strchr(puntero, INGRESO)) { *puntero++ = '0'; env[0] = buffer; env[1] = puntero; return 1; } return 0; } int background (char * buffer) { char *puntero = buffer; if (puntero = strchr(puntero, BACKGROUND)) { *puntero--; *puntero = '0'; return 1; } return 0; } int main( int argc, char *argv[] ) { int continuar; int ingreso; #ifdef DEBUG int i; #endif char buffer[MAX_BUF], *puntero, value[MAX_BUF], *args[MAX_ARGS], *comms[MAX_COMMS]; int j = 0, k = 0, pid = 0, numargs = 0, actual = 0, anterior = 0, t1[2], t2[2]; printf("nMinishell de sistemas Operativos"); printf("nn");
  • 3. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao do{ printf(PROMPT); printf("n MENU"); printf("n 1. Procesos en abanico"); printf("n 2. Semaforos"); printf("n 3. Creacion de archivos"); printf("n 4. Copia de un archivo a otro"); printf("n 5. Vector usando lseek"); printf("n 6. Comando tail"); printf("n 7. Pipes"); printf("n 8. Tuberias"); printf("n 9. Hora del sistema"); printf("n 10. Tiempo en modo usuario"); printf("n 11. Comandos"); printf("n Ingrese la opcion a realizar: "); scanf("%i",&ingreso); if(ingreso==11){ while(1) { printf(PROMPT); if (fgets(buffer, MAX_BUF, stdin) == NULL) continue; arrange(buffer); #ifdef DEBUG printf("Entrada: #%s#n", buffer); i = 0; #endif if (environment(buffer, args)) { //setenv(args[0], args[1], 1); = exit(0); } elseif (background(buffer)) { if (fork() == 0) { pid = fork(); if (pid) { wait(NULL); printf("Proceso terminado con PID=%dn", pid); printf(PROMPT); exit(0); } else { execlp(buffer, buffer, NULL); perror("Error de ejecucion de execvpn"); exit(0); } } } elseif (fork()) wait(NULL); else { numargs = makeargs(buffer, args); while (args[j] != NULL) { #ifdef DEBUG printf(" #%s#n", args[j]); #endif
  • 4. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao if (args[j][0] == DOLAR) { strcpy(value, getenv(++args[j])); args[j] = value; } if (*args[j] == '|') { args[j] = NULL; anterior = actual; actual = j+1; pipe(t1); #ifdef DEBUG printf("t1[0] = %d, t1[1] = %dn", t1[0], t1[1]); printf("t2[0] = %d, t2[1] = %dn", t2[0], t2[1]); printf("Anterior %dn", anterior); printf("Actual %dn", actual); #endif if (fork() == 0) { if (anterior != 0) { close(t1[0]); close(t2[1]); close(0); dup(t2[0]); close(1); dup(t1[1]); close(t1[1]); close(t2[0]); } else { close(t1[0]); close(1); dup(t1[1]); close(t1[1]); } execvp(args[anterior], &args[anterior]); perror("Error de execvpn"); exit(0); } else wait(NULL); t2[0] = t1[0]; t2[1] = t1[1]; } j++; } #ifdef DEBUG printf("t1[0] = %d, t1[1] = %dn", t1[0], t1[1]); printf("t2[0] = %d, t2[1] = %dn", t2[0], t2[1]); #endif close(t2[1]); close(0); dup(t2[0]); close(t2[0]); #ifdef DEBUG printf("actual %dn", actual); #endif execvp(args[actual], &args[actual]); perror("Error de execvpn"); exit(0); } } } elseif(ingreso==1){ pid_t pid; int i;
  • 5. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao int n = 4; printf ("nA partir de un proceso padre se crea un abanico de procesosn"); for (i = 0; i < n; i++) { pid = fork(); if (pid == 0) break; } printf("El padre del proceso %d es %dn", getpid(), getppid()); exit(0); } elseif(ingreso==2){ int pid_p; /* identifica el proceso hijo */ int mutex; /* semaforo binario */ mutex=inicia(1); if (0==(pid_p=fork())) proceso_hijo(mutex); else proceso_padre(mutex); borra_s(mutex); } elseif(ingreso==3){ int fd_archivo; int escrito=0; int aux=0; int longitud=5; char datos[]="Prueba"; fd_archivo=creat("Ejemplo",0644); if(fd_archivo==-1) { perror("Archivo no creado"); } else printf("Archivo creado"); while(escrito<longitud) { aux=write(fd_archivo, datos+escrito, longitud-escrito); if(aux>0) escrito=escrito+aux; } close(fd_archivo); } elseif(ingreso==4){ int fd_ent, fd_sal; /* identificadores de archivos */ char almacen[TAMANYO_ALM]; /* almacen de E/S */ int n_read; /* contador de E/S */ /* Abrir el archivo de entrada */ fd_ent = open ("Ejemplo", O_RDONLY); if (fd_ent < 0)
  • 6. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao { perror ("open"); exit (-1); } /* Crear el archivo de salida. Modo de protección: rw-r--r--*/ fd_sal = creat ("archivo_salida", 0644); if (fd_sal < 0) { perror ("creat"); exit (-1); } /* Bucle de lectura y escritura */ while ((n_read = read (fd_ent, almacen, TAMANYO_ALM)) >0 ) { if (write (fd_sal, almacen, n_read) < n_read) { perror ("write"); close (fd_ent); close (fd_sal); exit (-1); } } if (n_read < 0) { perror ("read"); close (fd_ent); close (fd_sal); exit (-1); } printf("El archivo copiado correctamente en archivo_salida"); close (fd_ent); close (fd_sal); } elseif(ingreso==5){ int fd_archivo; int numero; int longitud=10; char datos1[]="ABCDEFGHIJ"; char datos2[]="abcdefghij"; fd_archivo=creat("Vectores",0644); if(fd_archivo==-1) { perror("No se Puede Crear el Archivo"); } write(fd_archivo, datos1, longitud); numero= lseek(fd_archivo, 1024,SEEK_SET); write(fd_archivo, datos2, longitud); numero=lseek(fd_archivo, numero+1024,SEEK_SET); write(fd_archivo, datos1, longitud); printf("Archivo escrito con los vectores correctamente"); close(fd_archivo);
  • 7. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao } elseif(ingreso==6){ archivo=open("Leer", O_RDONLY); while(bytesleidos = read(archivo, buf, TB))//Cuento cuantas lineas tiene mi archivo { for(i=0; i<= 1024; i++) { if(buf[i] == 'n') larchivo++; } if(bytesleidos == -1) break; } close(archivo); printf ("nComando tailn nn"); printf("lineas para ver:"); scanf("%d",&lver); if(lver >= larchivo) lver = 0; else{ while(bytesleidos = read(archivo,buf, 1024)) { for(i=0; i <= 1024; i++) { if(buf[i] != 'n') desplazamiento++; else{ desplazamiento++; lineas++; } if(lineas == larchivo - lver - 1) break; } if(bytesleidos == -1) break; } close(archivo); } archivo = open("Leer", O_RDONLY); lseek(archivo, desplazamiento, SEEK_SET); while(bytesleidos = read(archivo, buf, TB)) { if(bytesleidos == -1) break; write(0, buf, bytesleidos); } close(archivo); printf("n"); } elseif(ingreso==7){ int fd[2]; char mensaje[] = "nMensaje enviado a hijo por Veron";
  • 8. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao char buffer[40]; pipe(fd); pid_t hijo; if((hijo = fork())<0) { perror("No se puede crear el proceson"); exit(1); } if(hijo!= 0) { close(fd[0]); write(fd[1],mensaje,strlen(mensaje)); } else { close(fd[1]); read(fd[0],buffer,sizeof(buffer)); printf("nLo que se envio por el pipe es: %s",buffer); } return(0); } elseif(ingreso==8){ int fd1[2]; pid_t pid; /* se crea la tuberia */ if (pipe(fd1) < 0) { perror("Error al crear la tuberia"); exit(0); } pid = fork(); switch (pid) { case -1: /* error */ perror("Error en el fork"); exit(0); case 0: /* proceso hijo ejecuta ls */ close(fd1[0]); close(STDOUT_FILENO); dup(fd1[1]); close(fd1[1]); execlp("ls", "ls", NULL); perror("Error en el exec"); break; default: /* proceso padre ejecuta wc */ close(fd1[1]); close(STDIN_FILENO); dup(fd1[0]); close(fd1[0]); execlp("wc", "wc", NULL); perror("Error en el exec"); } } elseif(ingreso==9){ time_t tiempo; struct tm *fecha;
  • 9. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao tiempo= time(NULL); fecha= localtime(&tiempo); /* hay que ajustar el año ya que lo devuelve respecto a 1900 */ printf ("%02d/%02d/%04d %02d:%02d:%02dn", fecha->tm_mday, fecha->tm_mon, fecha->tm_year+1900, fecha->tm_hour, fecha->tm_min, fecha->tm_sec); } elseif (ingreso==10){ struct tms InfoInicio, InfoFin; clock_t t_inicio, t_fin; long tickporseg; if (argc<2) { fprintf(stderr, "Uso: %s programa [args]n", argv[0]); exit(1); } tickporseg= sysconf(_SC_CLK_TCK); t_inicio= times(&InfoInicio); if (fork()==0) { execvp(argv[1], &argv[1]); perror("error ejecutando el programa"); exit(1); } wait(NULL); t_fin= times(&InfoFin); printf ("Tiempo real: %7.2fn", (float)(t_fin - t_inicio)/tickporseg); printf ("Tiempo de usuario: %7.2fn", (float)(InfoFin.tms_cutime - InfoInicio.tms_cutime)/tickporseg); printf ("Tiempo de sistema: %7.2fn", (float)(InfoFin.tms_cstime - InfoInicio.tms_cstime)/tickporseg); } printf("n Desea continuar: 1 0n"); scanf("%d", &continuar); }//do while(continuar==1); } proceso_hijo(critica) int critica; { int i,j; for (i=0;i< 5; i++) { P(critica); printf("Soy el proceso Hijo en el turno %d", i);
  • 10. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao fflush(stdout); //Limpia el buffer de teclado retardo (); printf("n"); V(critica); } exit(1); } proceso_padre(critica) int critica; { int i,j; for (i=0;i< 5; i++) { P(critica); printf("Soy el proceso Padre en el turno %d", i); fflush (stdout); //Limpia el buffer de teclado retardo (); printf("n"); V(critica); } wait(0); /* espera a que finalice el hijo */ } retardo() { struct timeval tiempo; struct timezone tz; unsignedlong inicio, ahora; gettimeofday(&tiempo, &tz); ahora = inicio = tiempo.tv_sec * 1000000 + tiempo.tv_usec; // ESPERA microsegs while (ahora < inicio + ESPERA) { gettimeofday(&tiempo, &tz); ahora = tiempo.tv_sec * 1000000 + tiempo.tv_usec; } } inicia(valor) int valor; { int semval; int id; union semun { int val; struct semid_ds *buf; ushort *array; } arg; //Permisos del semaforo creado if ((id=semget(IPC_PRIVATE, 1, (IPC_CREAT|0666))) == -1) {
  • 11. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao perror("Error al crear semaforo."); return(-1); } arg.val = valor; if (semctl(id, 0, SETVAL, arg) == -1) { perror("Error al inicializar semaforo."); return (-1); /*error en inicializacion*/ } return(id); } /*Rutina P */ P(semaforo) int semaforo; { if ( semcall(semaforo, -1) == -1 ) perror("Error"); } /*Rutina V */ V(semaforo) int semaforo; { if ( semcall(semaforo, 1) == -1 ) perror("Error"); } semcall(semaforo, operacion) int semaforo, operacion; { struct sembuf sb; sb.sem_num = 0; sb.sem_op = operacion; sb.sem_flg = 0; return ( semop(semaforo, &sb, 1) ); /*devuelve -1 si error */ } borra_s(semaforo) int semaforo; { if ( semctl(semaforo, 0, IPC_RMID, 0) == -1) { perror("Error"); return(-1); } } CAPTURAS:
  • 12. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao
  • 13. ESCUELA POLITÉCNICA NACIONAL CARRERA DE INGENIERÍA EN SISTEMAS INFORMÁTICAS Y DE COMPUTACIÓN SISTEMAS OPERATIVOS NOMBRE: Alexander Pinchao