shell

6

Click here to load reader

Upload: marcos-vayas

Post on 08-Jul-2015

1.180 views

Category:

Documents


0 download

DESCRIPTION

codigo de una shell para Xp

TRANSCRIPT

Page 1: Shell

UNIVERSIDAD TÉCNICA DE AMBATO

FACULTAD DE CIENCIAS HUMANAS Y DE LA EDUCACIÓN

CARRERA DE DOCENCIA EN INFORMÁTICA

SEMESTRE

SEPTIEMBRE 2011 – FEBRERO 2012

SISTEMAS OPERATIVOS

TEMA: SHELL

Integrantes: JUAN VALENCIA

MARCOS VAYAS

Page 2: Shell

RESUMEN

Hay que tomar en cuenta algunos pasos para crear una Shell

Que es una Shell.- En informática, el término Shell se emplea para

referirse a programas que proveen una interfaz de usuario para acceder a

los servicios bien una vez que ya sabemos que es una Shell veamos

1. Primero hay que saber en dónde y en qué sistema operativo vas a

trabajar , por esta razón de que si hacemos una Shell para XP esta

no correrá en vista o mucho menos en otro sistema operativo

2. Entonces debemos crear librerías para esta Shell en este caso de

nosotros crearemos tres comandos

Estas son:

2.1 Para ver el directorio

Esta tendrá el nombre de “directorio” el mismo que puede ser

modificado en el código fuente

2.2 Para limpiar la pantalla

Este comando se llamara “limpiar” el mismo que puede ser

cambiado en el código fuente de la misma manera que todas las

instrucciones o comandos

2.3 Para salir de la pantalla principal o de modo consola

Utilizaremos una instrucción llamada “salir”

A continuación se mostrara el código fuente que se utilizo

# include <stdio.h> # include <conio.h> # include <string.h> # include <dir.h> void Imprimir(int x, int y, int c, char cmd[]) { int i=0; gotoxy(x,y); for(i=0; i<c; i++) { printf("%c",cmd[i]); } printf(" "); gotoxy(x+c,y); } void Ingresar(char cmd[]) { char op;

Page 3: Shell

int c=0; int x=wherex(); int y=wherey(); do{ op=getche(); if (op==8) { if (c>0) { c--; } } if (op!=13 && op!=8 && op!=27) { cmd[c]=op; c++; } Imprimir(x,y,c,cmd); }while(op!=13); cmd[c]='\0'; } int Comparar(char cmd1[], char cmd2[]) { int resultado=0; int l1 = strlen(cmd1); int l2 = strlen(cmd2); if (l1!=l2) resultado=1; else { int i; for(i=0; i<l1; i++) { if(cmd1[i]!=cmd2[i]) { resultado=1; break; } } } return resultado; } int CompararParte(char cmd1[], char cmd2[], int l) { int resultado=0; int l1 = strlen(cmd1); int l2 = strlen(cmd2);

Page 4: Shell

if (l1<l || l2<l) resultado=1; else { int i; for(i=0; i<l; i++) { if(cmd1[i]!=cmd2[i]) { resultado=1; break; } } } return resultado; } void Limpiar() { clrscr(); } void Lista(char ruta[], char dir[]) { struct ffblk ffblk; int done; if (dir[0]=='\0') { printf("\nArchivos del Directorio actual %s\n",dir); } else { printf("\nDirectorio de %s\n",dir); } if (ruta[0]=='\0') { done = findfirst("*.*",&ffblk,0); } else { done = findfirst(ruta,&ffblk,0); } while (!done) { printf("\t%s\n", ffblk.ff_name); done = findnext(&ffblk); } }

Page 5: Shell

void Directorio(char cmd[]) { //Obtener el directorio char ruta[80]; char dir[80]; int i=0,j=0,k=0; int l=strlen(cmd); for(i=l-1;i>=0;i--) { if(cmd[i]==' ') { break; } } k=0; if(i>0) { for(j=i+1;j<l;j++) { ruta[k]=cmd[j]; k++; } } ruta[k]='\0'; l=strlen(ruta); k=0; for(i=l-1;i>0;i--) { if(ruta[i]=='\\') { k=1; break; } } if(k==1) { for(j=0;j<i;j++) { dir[j]=ruta[j]; } dir[j]='\0'; } else { dir[0]='\0'; }

Page 6: Shell

Lista(ruta, dir); } void main() { char cmd[80]; int salir=0; clrscr(); printf("C:\\>"); do{ Ingresar(cmd); if(Comparar(cmd,"salir")==0) { salir=1; } else { if(Comparar(cmd,"limpiar")==0) { Limpiar(); } else { if(CompararParte(cmd,"enlistar",3)==0) Directorio(cmd); else printf("\nEl comando es incorrecto"); } } printf("C:\\>"); }while(salir==0); }