1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sistemas Operativos

Discussão em 'Programação' iniciada por Tolo19, 22 de Fevereiro de 2013. (Respostas: 3; Visualizações: 607)

  1. Eu tenho que fazer este exercicio mas estoucom algumas dificuldades alguem me pode ajudar, tem que funcionar em ambiente linux

    Implemente um programa de monitorização que permita verificar, a cada 60 segundos, quais são os
    utilizadores que estão ligados no sistema (“who”). O resultado do comando deve ser guardado (de forma
    incremental) num ficheiro de registos (“logs.txt”). O programa deve ainda efetuar um registo adicional
    sempre que receber um CTRL+C. Não é permitido o uso da função “sleep”.

    Ate agora fiz isto
    Código:
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    
    /*
    void termination_handler(int signum)
    {
            static int i = 3;
    
            if (i)
            {
                    printf("i = %d\n", i);
                    i--;
            }
            else
                    exit(0);
    }
    */
    int gravarFicheiro(char * mensagem){
    
    
    FILE *fp;
    
    char linhas[25];
    
    fp=fopen("logs.txt","w");
    
    strcpy(linhas,mensagem);
    
    fprintf(fp,"%s",linhas);
    
        
            
    
    
    fclose(fp);
    
    
    
    return 1;
    
    }
    
    int main()
    {
            /*struct sigaction action;
    
            action.sa_handler = termination_handler;
            sigemptyset(&action.sa_mask);
            action.sa_flags = 0;
    
            sigaction(SIGINT, &action, NULL);
    
            while (1) void */
    
          char mensagem[]="Gravouu\n";
           gravarFicheiro(&mensagem);
            
    
    
            return 0;
    }
     
    Última edição: 22 de Fevereiro de 2013
  2. dropko

    dropko Power Member

    qual é a dificuldade?
     
  3. Nao sei como fazer aquilo dos 30 segundos.
    Depois tive a alterar algumas coisas e agora ja nem escreve para o ficheiro
    Código:
    int main()
    {
           
    
            char mensagem[25];
               char linhas[25];
        int i=1;
        
        while(i){
    
        if(fork()==0){
        execlp("who", "who", mensagem, NULL);
        
        }
        else{
    
        
        FILE *fp;
     
        fp=fopen("logs.txt","w");
        strcpy(linhas,mensagem);
        fprintf(fp,"%s",linhas);
    
        fclose(fp);
      
    
              }
      i--;
    }
            return 0;
    }
     
  4. dropko

    dropko Power Member

    podes por a maquina de estados a validar a condicao cada 60 segundos (guardando tempo anterior e comparando tempo actual) ou suspendendo a thread esse tempo.
     

Partilhar esta Página