elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / [AYUDA] Con lista en C en: 12 Diciembre 2012, 02:06 am
/*

El problema es que al ejecutar el comando splano ps deberia de insertar en la lista la informacion del proceso ps, pero al ejecutar el comando imprimir la lista esta vacia. Un saludo GRACIAS

*/


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <dirent.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
#include <sys/resource.h>
#include <sys/wait.h>

struct proceso
{
   int pid;
   int prioridad;
   char *comando;
   char *fecha;
   char *status;
   
   struct proceso *sig;//apuntador a la siguiente estructura
};

typedef struct proceso _nodo;

_nodo *crearLista(_nodo *apuntador)
{
   apuntador = NULL;
   return apuntador;
}

_nodo *insertarEnLista(int pid,int prioridad,char *comando,char *fecha,char *status,_nodo *apuntador)
{
   _nodo *registroNuevo, *apuntadorAuxiliar;

   registroNuevo = (_nodo*) malloc(sizeof(_nodo));

   if(registroNuevo != NULL)
   {
      registroNuevo->pid = pid;
      registroNuevo->prioridad = prioridad;
      registroNuevo->comando = comando;
      registroNuevo->fecha = fecha;
      registroNuevo->status = status;

      if(apuntador == NULL)
         apuntador = registroNuevo;
      else
      {
         apuntadorAuxiliar = apuntador;

         while(apuntadorAuxiliar->sig != NULL)
            apuntadorAuxiliar = apuntadorAuxiliar->sig;
            
         apuntadorAuxiliar->sig = registroNuevo;
      }
   }
   
   return apuntador;

}

void imprimirLista(_nodo *apuntador)
{
   _nodo *apuntadorAuxiliar;

   apuntadorAuxiliar = apuntador;
   
   while(apuntadorAuxiliar != NULL)
   {
      printf("%d -> ",apuntadorAuxiliar->pid);
      printf("%d -> ",apuntadorAuxiliar->prioridad);
      printf("%s -> ",apuntadorAuxiliar->comando);
      printf("%s -> ",apuntadorAuxiliar->fecha);
      printf("%s -> ",apuntadorAuxiliar->status);
      apuntadorAuxiliar = apuntadorAuxiliar->sig;
   }
   
   printf("NULL \n");
   
   return;
}

int main()
{
   _nodo *inicioLista;
   
    inicioLista= crearLista(inicioLista);
   
    //inicioLista = insertarEnLista(5,12,"pwd","19/05","ACT",inicioLista);

   
int stop=1,n;

char *comando[1000],*p;
char *cadena = (char *)malloc(sizeof(char)*1000);


   while(1){
      printf("Introduzca el comando: ");
      p = fgets(cadena, 1000, stdin);
         if (strcmp(p,"\n")==0) {//si p nulo, salta error y sale del programa
         continue;
         
      }
       n = TrocearCadena(p,comando);
      
      if (0!=ProcesarComando(comando,&n, inicioLista)) break;
   
   }

   free(inicioLista);
   free(cadena);
   
   return EXIT_SUCCESS;
}

int TrocearCadena(char *p, char *trozos[1000]){
   int i=1;
   if ((trozos[0]=strtok(p," \n\t"))==NULL)
   return 0;
   while ((trozos=strtok(NULL," \n\t"))!=NULL)//busca los delimitadores y
   i++;
   return i;
}

int ProcesarComando(char *coman[],int *n,_nodo *listaProcesos){
   
   if(strcmp(coman[0],"splano")==0){splano(coman,listaProcesos,n);}
   else if(strcmp(coman[0],"imprimir")==0){imprimirLista(listaProcesos);}
         
   return 0;
   
}

int splano(char *cadena[],_nodo *listaProcesos,int *n){
   _nodo *iniciolista;
   long tiempo= time(NULL);
   char * fecha = ctime(&tiempo);
   int which = PRIO_PROCESS;
   char *aux;
   int pid_hijo;
   int *espera = NULL;
   int i=0;
   int err=0;
   pid_hijo = fork();
      if(pid_hijo ==0){
              if(cadena[*n-1][0]=='@'){
         aux = cadena[*n-1];
         aux[0]=' ';
         if(setpriority(which,execvp(cadena[1],&cadena[1]),atoi(aux))<0){
               perror ("setprio");
               }
         }else{
         
         if(execvp(cadena[1],&cadena[1])==-1){perror("splano-EXEC");}
         

         }

      }else if(pid_hijo ==-1)perror("splano-fork");
         
               
         

   iniciolista = insertarEnLista(pid_hijo,getpriority(which,0),cadena[1],"act",fecha,listaProcesos);
   
   
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines