Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Programa

estou tentando criar um programa onde ele identifica se o navegador está aberto e cronometra, e manda para uma pasta quanto tempo você passou com o navegador aberto. mas eu fiquei totalmente perdido na parte de cronometrar só quando o navegador estivesse aberto.

#include <stdio.h>

#include <stdlib.h>

int main() {
  int hora, min, seg; // Declarando as variáveis.
  int i;
  int u = 0;
  hora = 0, min = 0, seg = 0; // Inicializando variáveis.

  FILE * aux;
  char buffer[1035];
  while (1) {

    /** Executa o pgrep e verifica se houve êxito */
    aux = popen("pgrep firefox", "r");

    if (aux == NULL) {
      printf("erro popen \n");
    }

    /** Verifica se pgrep retornou alguma saída*/

    if (fgets(buffer, sizeof(buffer), aux) == NULL) {

    } else {

      while (hora < 24 ) {
        while (min < 60) {
          while (seg < 59) {
            FILE * f;

            f = fopen("horas.txt", "r+");

            fseek(f, 0, SEEK_SET);
            fprintf(f, "1 - %dh;%d;%d", hora, min, seg);

            fclose(f);

            seg = seg + 1; // Incrementando segundo.
            for (i = 0; i < 190000000; i++) //+- 190.000.000 milhonésimos -> loop de delay
              u++;
          }

          seg = 0; // Resetando segundo.
          min = min + 1; // Incrementando minuto.

        }

        min = 0;
        hora = hora + 1; // Incrementando hora.

        if (hora > 23) {
          hora = 0; // Resetando hora, para que o loop seja continuo.
        }

      }
    }
  }
  pclose(aux);
  return 0;
}
1 resposta
solução!

Talvez ao invés de ficar incrementando, você poderia verificar se o navegador está aberto, pegar o PID a hora e o dia do sistema, se esse PID fosse terminado ele marca de novo a hora e dia do sistema, calcula a diferença de horário e dá o output no arquivo.

Assim você evita ficar fazendo muito IO (que inclusive detona disco, ainda mais se for um SSD ou num embarcado com SD).

Espero ter ajudado.

O código não vou dar pitaco, parece que vc pesquisou como fazer e tá bem legal a idéia...mas em termos de modo de operação dá pra abandonar o cronometro.