Sistemas Operativos

Tolo19

Membro
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:
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;
}
 
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.
 
Back
Topo