Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Solucion 7: alumno

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void rehacer_pantalla();
void presentar_menu();
void ejecutar_ps_completo();

int buscaespacio1(char *texto);
int buscaespacio2(int,char *texto);





typedef struct{
    int num;
    int proceso;
    char nombre[350];
}linea_datos;

linea_datos linea[500];// numero maximo de procesos a gestionar

int main(int argc, char **argv) {
    int op = 1000;
    char entrada_texto[10];
    char *comando[100];
    int pro;
    rehacer_pantalla();

    while (op != 0) {
        op = atoi(gets(entrada_texto));
        switch (op) {
        case 1:
             system("ps");
           printf("\n    Pulse Enter \n");
            break;
        case 2:
            system("ps a");
printf("\n    Pulse Enter \n");
            break;

        case 3:
system("ps u");
printf("\n    Pulse Enter \n");
            break;

case 4:
system("ps x");
printf("\n    Pulse Enter \n");
            break;

case 5:
system("ps f");
printf("\n    Pulse Enter \n");
            break;


case 6:
system("jobs");
printf("\n    Pulse Enter \n");
            break;

        case 7:
            ejecutar_ps_completo();
printf("\n    Pulse Enter \n");           
       
        break;
        case 8:
            printf("\nNº del proceso (a parar) ");
            pro = atoi(gets(entrada_texto));
            sprintf(comando,"kill -19 %d",pro);
             system(comando);
printf("\n    Pulse Enter \n");
            break;

        case 9:
            printf("\nNº del proceso (a continuar): ");
            pro = atoi(gets(entrada_texto));
            sprintf(comando,"kill -18 %d",pro);
             system(comando);
printf("\n    Pulse Enter \n");
            break;
    case 10:
            printf("\nNº del proceso (a terminar): ");
            pro = atoi(gets(entrada_texto));
            sprintf(comando,"kill 15 %d",pro);
             system(comando);
    printf("\n    Pulse Enter \n");
            break;
    case 11:
            printf("\nNº del proceso (a matar): ");
            pro = atoi(gets(entrada_texto));
            sprintf(comando,"kill 9 %d",pro);
             system(comando) ;
   printf("\n    Pulse Enter \n");
    break;
    case -1:
    op=0;
   
            break;   
            default:
            rehacer_pantalla();
            op=1020;
        }
       
   
        }

       
   
    return 0;
}

void rehacer_pantalla(muestra) {
    int resp;
    resp = system("clear");

    presentar_menu();
}

void presentar_menu() {

    printf("\033[47m\033[1;35m\033[2;0H    Menu: MATA     \033[0m\n");
    printf("\033[3;0H-1) Salir del programa\n");
    printf("\033[4;0H 1) Muestra los procesos del terminal\n ");
    printf("\033[5;0H 2) Muestra los procesos de todos los usuarios del terminal\n");
    printf("\033[6;0H 3) Identifica el usuario que ha puesto en marcha ese proceso y cuando se inicio ese proceso\n");
    printf("\033[7;0H 4) Muestra los procesos que no dependen de un terminal");
    printf("\033[8;0H 5) Rastrear que proceso es el padre de que proceso (forma arbol)");
    printf("\033[9;0H 6) Muestra trabajos en 2º plano");
    printf("\033[10;0H 7) Todos los procesos del ordenador, mostrando usuario y en forma de arbol");

    printf("\033[11;0H 8) Parar un proceso");
    printf("\033[12;0H 9) Continuar un proceso");
    printf("\033[13;0H10) Terminar un proceso");
    printf("\033[14;0H11) Matar un proceso");
    printf("\033[15;0HNúmero de la opción:           ");
    printf("\033[15;21H");        // para que se ponga en la misma linea del nº de opcion


}


void ejecutar_ps_completo(){
  int c = 0;
    FILE *pf;
    char texto[5455];
    char *p;
    char proceso[100];
    char *lista_proceso[1000] ;
    int ac=0;//
    int pos_espacio1=0;
    int pos_espacio2=0;
    int b=0;
    p = texto;

// obtengo los datos de la linea de procesos
   pf = popen("ps a u x f", "r");

    fgets(texto,5450, pf); 
    c++;


/* no me funciona !!!!!!
    while (!feof(pf)) {
     fgets(texto, 5450, pf);
        c++;
//printf("%s \n",texto);

    // analizo linea....
//sprintf(linea2,"%3d: %s", c, texto);
linea[c].num=c;


// buscar el primer " " 
pos_espacio1=buscaespacio1(texto);
pos_espacio2=buscaespacio2(pos_espacio1,texto);

//printf("%3d , %3d \n %s \n",pos_espacio1,pos_espacio2,texto);

// asignar el trozo que hemos seleccionado
b=-1;
ac=pos_espacio1-1;
while (ac<pos_espacio2){
b++;
ac++;
proceso[b]=texto[ac];

}

proceso[b+1]='\0';

//printf("%3d , %3d, proceso: %s \n %s \n",pos_espacio1,pos_espacio2,proceso,texto);


strcpy(lista_proceso[linea[c].num],proceso);

//printf("%3d %s \n",linea[c].num,proceso);


    }
pclose(pf);

*/




// escribo en pantalla los procesos

    pf = popen("ps a u x f", "r");
c=-1;
    fgets(texto, 350, pf);
    c++;
printf("     %s", texto); // dibuja rotulo

    while (!feof(pf)) {
     fgets(texto, 350, pf);
        c++;
printf("%3d: %s",c, texto);
    }
pclose(pf);


}

int buscaespacio1(char *texto){
    int a=0;
    int paso1=0;
    int c=0;
    while (a!=1){
        if (texto[c]==' '){
            paso1=1;
           
        } else {
        if (paso1==1 && texto[c]!=' '){
            return c;
        }
       }
        c++;
    }
return 0;   
}


int buscaespacio2(int inicio,char *texto){
    int a=0;
    int paso1=0;
    int c=inicio;
    while (a!=1){
        if (texto[c]==' '){
            paso1=1;
            return c;
        }
        c++;
    }
    return 0;
}

No hay comentarios:

Publicar un comentario