Liado con el time.h

Jaime
26 de Noviembre del 2002
Estoy intentando hacer un programa que consuma una cierta cantidad de memoria, tiempo de CPU y tiempo real (que le pasare como parametros), el codigo que estaba intentando es este.. pero no consigo nada... alguien me puede ayudar?

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/times.h>
#include <unistd.h>

int main (int argc, char* argv[]) {

float tmreal,tmcpu, mem;
char * ptmem;
int i;

double timetick,tstart,ucpustart,ucpu,ttot;

struct tms cpu;
struct timeval tp;
struct timezone tzp;

/*inicializa el reloj*/
timetick=1.0/(double)(sysconf(_SC_CLK_TCK));
gettimeofday(&tp, &tzp);
tstart=(double)tp.tv_sec+(double)tp.tv_usec*1.0e-6;
/*inicializa el tiempo de CPU*/
times(&cpu);
ucpustart=(double)(cpu.tms_utime+cpu.tms_cutime)*timetick;

/* Guardamos los valores a consumir en seg y kb */
tmreal=(float) atof(argv[1]);
tmcpu=(float) atof(argv[2]);
mem=(float) atof(argv[3]);

ptmem=malloc(mem*1024);
printf("TReal= %f,\t TCPU= %f,\t MEM= %f.\n",tmreal,tmcpu,mem);


/*tiempo de cpu usado*/
ucpu=0;
while (ucpu<tmcpu) {
times(&cpu);
ucpu=(double)(cpu.tms_utime+cpu.tms_cutime)*timetick-ucpustart;
}

/*tiempo total usado*/
gettimeofday(&tp, &tzp);
ttot=(double)tp.tv_sec+(double)tp.tv_usec*1.0e-6-tstart;
usleep((tmreal-ttot)*1.0e6);
ttot=(double)tp.tv_sec+(double)tp.tv_usec*1.0e-6-tstart;
/*imprime resultados*/
printf("CPU usada= %f\n",ucpu);
printf("T total= %f\n",ttot);

free(ptmem);
exit(0);

}

Jorge
26 de Noviembre del 2002
Pues no se, yo no entiendo mucho de la time tampoco pero es que ahi usas cada cosa.. si esas formulas que metes son las que tocan parece que la cosa deberia funcionar no??
Reservas la memoria que quieres que gaste, haces un bucle hasta que consuma el tiempo de cpu que tu deseas, y luego lo duermes hasta que acabe el tiempo real.. parece logico..
Aunque los printf seguro que asi no te funcionan, quita esas barras que sobran :-)
Adios

Jaime
26 de Noviembre del 2002
Las formulas esas las saque de un libro de sistemas operativos que use el año pasado, deben estar bien. El proposito del programa es ese que dices, parece q alguien me entiende:-D Pero no funciona, no me gasta la memoria q tiene que gastar (ni siquiera quitando las optimizaciones al compilador.. uso el gcc) Lo de los printf ya me he dado cuenta, es que el fichero lo hice en linux y al copiar se ve que salio mal.

A ver si alguien mas me puede echar un cable por favor, que me he quedado aqui atrancado.. gracias por adelantado.