Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

sexta-feira, 28 de março de 2008

Monitorando tempo de execução de uma função

Esse macete eu achei especialmente útil na hora de estudar o desempenho dos diversos algoritmos de ordenação. Aprendi no "Advanced Programming in the UNIX Environment" (Stevens e Rago), no Seção 8.16.

Vamos direto à prática, para detalhes é necessário consultar o livro e/ou as man pages.

Primeiro temos que criar a seguinte função para imprimir o tempo:


#include <unistd.h>

static void imprimetempo(clock_t tempo) {
    static long clktck = 0;

    if(clktck == 0)
        if((clktck = sysconf(_SC_CLK_TCK)) < 0)
            perror("sysconf");

    printf("%7.2f s", tempo / (double) clktck);
}


E para que esta função seja útil temos que chamá-la de maneira análoga ao exemplo abaixo:


#include <sys/times.h>

int main() {
    clock_t ini, fim;
    .
    .
    .
    ini = times(NULL);
    funcao_que_quero_ver_quanto_tempo_leva(argumentos);
    fim = times(NULL);

    printf("Tempo que levou: ");
    imprimetempo(fim - ini);
    .
    .
    .
    return 0;
}

sábado, 8 de março de 2008

recuperando senha do root no FreeBSD

Essa dica foi retirada de http://under-linux.org/wiki/index.php/Dicas/FreeBSD/FreeBSD-Senha.

Na tela de contagem regressiva para escolha do boot, basta optar pelo prompt de comando para as opções de boot. Daí é só entrar com "boot -s" que vai entrar como administrador sem pedir senha alguma. Daí é só usar o passwd para trocar a senha. Se não funcionar é porque precisa montar as partições. Um "mount -a" deve resolver isso e então é só usar o passwd.

Essa me tirou do sufoco hoje! =D

segunda-feira, 3 de março de 2008

gerando números aleatórios

Essa eu aprendi no Programming in C - UNIX System Calls and Subroutines using C. Trata-se de uma gambiarra para gerar números aleatórios.

Abaixo uma função que gera n números aleatórios de zero a nove e guarda no vetor V passado a função como parâmetro:


#include <stdlib.h>
#include <time.h>

#define MAIOR 10


void geranumeros(int V[], int n) {
    srand((unsigned int) time(NULL));
    while(n > 0)
        V[--n] = rand() % MAIOR;
}


Achei isso especialmente útil na hora de testar os algoritmos de ordenação ensinados na disciplina de Estrutura de Dados II.

tags