Chapter 4. Intellectual Property Strategy
4.1 Study of IP Basics and Potential Issues
4.1.4 Potential Issues
19.1 Funciones básicas para el tiempo
Algunas prototipos de las funciones básicas para el tiempo son las Algunas prototipos de las funciones básicas para el tiempo son las siguientes:
siguientes: •
• time_t time(time_t *t) -- devuelve el tiempo transcurrido, medidotime_t time(time_t *t)-- devuelve el tiempo transcurrido, medido en segundos desde ``la época'' 0 horas, 0 minutos, 0 segundos, tiempo en segundos desde ``la época'' 0 horas, 0 minutos, 0 segundos, tiempo universal coordinado (GMT) del 1^o de enero de
universal coordinado (GMT) del 1^o de enero de 1970. Esta medida se1970. Esta medida se llama el ``tiempo de calendario''. Si
llama el ``tiempo de calendario''. Sittno es nulo, el valor devueltono es nulo, el valor devuelto también se guarda en la zona de memoria a la que apunta
también se guarda en la zona de memoria a la que apuntatt. En caso. En caso de error, se devuelve
de error, se devuelve((time_t)-1)((time_t)-1)y se asigna a la variabley se asigna a la variableerrno errno un valor apropiado.
un valor apropiado.
•
• ftime(struct timeb *pt)ftime(struct timeb *pt) -- devuelve la hora y la fecha actuales en-- devuelve la hora y la fecha actuales en
pt
pt, que esta declarada en, que esta declarada en<sys/timeb.h> <sys/timeb.h> como sigue:como sigue: •
• struct timebstruct timeb
•
• {{
•
• time_t time_t time; time; /* /* Segundos Segundos desde desde epoca, epoca, igualigual
que
que `time'. `time'. */*/
•
• unsigned short int millitm; /* millisegundosunsigned short int millitm; /* millisegundos adicionales. */
adicionales. */
•
• short short int int timezone; timezone; /* /* Tiempo Tiempo local local medido medido enen
minutos oeste de GMT.*/
minutos oeste de GMT.*/
•
• short short int int dstflag; dstflag; /* /* No No cero cero si si se se usa usa horario horario dede
verano */
verano */
•
• };};
En caso de éxito, se devuelve el tiempo transcurrido en En caso de éxito, se devuelve el tiempo transcurrido en segundos desde la época. En caso de error, se devuelve segundos desde la época. En caso de error, se devuelve
((time_t)-1)
((time_t)-1)y se asigna a la vy se asigna a la v ariableariableerrno errno un valor un valor apropiado.
apropiado. •
• char *ctime(time_t *timep)char *ctime(time_t *timep) -- toma un argumento de tipo-- toma un argumento de tipotime_ttime_t (long integer) que representa el tiempo de calendadrio y lo convierte a (long integer) que representa el tiempo de calendadrio y lo convierte a una cadena de 26 caracteres de la forma producida por la función una cadena de 26 caracteres de la forma producida por la función
asctime()
asctime(). En primer lugar descompone los segundos a una. En primer lugar descompone los segundos a una estructura
estructuratm tm llamando allamando alocaltime()localtime(), y entonces llama a, y entonces llama a
asctime()
asctime()para convertir la estructurapara convertir la estructuratm tm a una cadena.a una cadena. •
• char *asctime(const struct tm *timeptr)char *asctime(const struct tm *timeptr) -- convierte un valor de-- convierte un valor de tiempo contenido en una estructura
tiempo contenido en una estructuratm tm a una cadena de 26 caracteresa una cadena de 26 caracteres de la forma:
de la forma:
ddd mmm dd hh:mm:ss aaaa ddd mmm dd hh:mm:ss aaaa La función
La funciónasctime()asctime()regresa un apuntador a la cadena.regresa un apuntador a la cadena.
19.2 Ejemplos de aplicaciones de funciones del tiempo.
19.2 Ejemplos de aplicaciones de funciones del tiempo.
Como se menciono previamente, básicamente existen tres posibles Como se menciono previamente, básicamente existen tres posibles usos de las funciones de tiempo.usos de las funciones de tiempo.
19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.
19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.
Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo en distintos momentos: en distintos momentos: /* timer.c */ /* timer.c */ #include <stdio.h> #include <stdio.h> #include <sys/types.h> #include <sys/types.h> #include <time.h> #include <time.h> main() main() { { int i,j; int i,j; time_t t1,t2; time_t t1,t2; (void) time(&t1); (void) time(&t1);
for (i=1; i<=300; ++i)
for (i=1; i<=300; ++i)
{
{
printf("%d %d %d\n",i, i*i, i*i*i );
printf("%d %d %d\n",i, i*i, i*i*i );
for(j=0; j<1000000; j++); /* Un pequeño retardo */
for(j=0; j<1000000; j++); /* Un pequeño retardo */
}
}
(void) time(&t2);
(void) time(&t2);
printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n",
printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n",
(int) t2-t1);
(int) t2-t1);
}
}
19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.
19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.
Se ha visto un ejemplo similar previamente, en esta ocasión se usa la Se ha visto un ejemplo similar previamente, en esta ocasión se usa la función
funciónlrand48()lrand48()para generar una secuencia de números:para generar una secuencia de números: /* random.c */ /* random.c */ #include <stdio.h> #include <stdio.h> #include <sys/types.h> #include <sys/types.h> #include <time.h> #include <time.h> main() main() { { int i; int i; time_t t1; time_t t1; (void) time(&t1); (void) time(&t1); srand48((lo srand48((long) ng) t1);t1);
/* usar time en segundos para poner la semilla */
/* usar time en segundos para poner la semilla */
printf("5 numeros aleatorios (semilla = %d):\n",(int) t1);
printf("5 numeros aleatorios (semilla = %d):\n",(int) t1);
for (i=0;i<5;++i) for (i=0;i<5;++i) printf("%d ", lrand48()); printf("%d ", lrand48()); printf("\n\n"); printf("\n\n"); } } La función
La funciónlrand48()lrand48()devuelve enteros largos no negativosdevuelve enteros largos no negativos distribuidos
distribuidos uniformememnte uniformememnte entre entre 0 0 y y .. Una función similar es la función
Una función similar es la funcióndrand48 drand48 que regresa números deque regresa números de doble
doble precisión precisión en en el el rango rango ..
srand48()
srand48()pone el valor de la semilla para pone el valor de la semilla para estos generadores deestos generadores de números aleatorios. Es importante tener diferentes semillas cuando se números aleatorios. Es importante tener diferentes semillas cuando se llame a las funciones de otra forma el mismo conjunto números pseudo- llame a las funciones de otra forma el mismo conjunto números pseudo- aleatorios sera generados. La función
aleatorios sera generados. La funcióntime()time()siempre da una semillasiempre da una semilla única (siempre y cuando haya transcurrido por lo menos 1 segundo). única (siempre y cuando haya transcurrido por lo menos 1 segundo).
19.3 Ejercicios
19.3 Ejercicios
1.1. EscEscribribir un pir un progrogramrama en C qua en C que mide mida el tia el tiempempo de un fo de un fragragmenmento dto dee código en milisegundos.
código en milisegundos.
2.
2.
Escribir un programa en C para producir una serie de númerosEscribir un programa en C para producir una serie de números aleatorios de punto flotante en los rangos a) 0.0 - 1.0, b) 0.0 - n, donde aleatorios de punto flotante en los rangos a) 0.0 - 1.0, b) 0.0 - n, donde nneses cualquier valor flotante. La semilla deberá estar puesta para que se garantice cualquier valor flotante. La semilla deberá estar puesta para que se garantice una secuencia única.una secuencia única.
Subsecciones Subsecciones
•
• 19.1 Funciones básicas para el tiempo19.1 Funciones básicas para el tiempo •
• 19.2 Ejemplos de aplicaciones de funciones del 19.2 Ejemplos de aplicaciones de funciones del tiempo.tiempo. o
o 19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer 19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.
algún cálculo. o
o 19.2.2 Ejemplo 2: Inicializar la s19.2.2 Ejemplo 2: Inicializar la semilla de un númeroemilla de un número aleatorio.
aleatorio.
•
19. Funciones para el tiempo
19. Funciones para el tiempo
En este capítulo se revisará como se puede usar el reloj con llamadas En este capítulo se revisará como se puede usar el reloj con llamadas al sistema UNIX.
al sistema UNIX.
Existen muchas funciones para el tiempo que las que serán Existen muchas funciones para el tiempo que las que serán consideradas aquí -- usar las páginas de
consideradas aquí -- usar las páginas de man man y los listados de lay los listados de la biblioteca estándar de funciones para más
biblioteca estándar de funciones para más detalles.detalles. El uso más común de las funciones de tiempo son: El uso más común de las funciones de tiempo son: •
• conocer el tiempo,conocer el tiempo, •
• tomar el tiempo a programas y funciones ytomar el tiempo a programas y funciones y •
• poner valores a semillas.poner valores a semillas.
19.1 Funciones básicas para el tiempo
19.1 Funciones básicas para el tiempo
Algunas prototipos de las funciones básicas para el tiempo son las Algunas prototipos de las funciones básicas para el tiempo son las siguientes:
siguientes:
•
• time_t time(time_t *t)time_t time(time_t *t) -- devuelve el tiempo transcurrido, medido-- devuelve el tiempo transcurrido, medido en segundos desde ``la época'' 0 horas, 0 minutos, 0 segundos, tiempo en segundos desde ``la época'' 0 horas, 0 minutos, 0 segundos, tiempo universal coordinado (GMT) del 1^o de enero de
universal coordinado (GMT) del 1^o de enero de 1970. Esta medida se1970. Esta medida se llama el ``tiempo de calendario''. Si
llama el ``tiempo de calendario''. Sittno es nulo, el valor devueltono es nulo, el valor devuelto también se guarda en la zona de memoria a la que apunta
también se guarda en la zona de memoria a la que apuntatt. En caso. En caso de error, se devuelve
de error, se devuelve((time_t)-1)((time_t)-1)y se asigna a la variabley se asigna a la variableerrno errno un valor apropiado.
un valor apropiado. •
• ftime(struct timeb *pt)ftime(struct timeb *pt) -- devuelve la hora y la fecha actuales en-- devuelve la hora y la fecha actuales en
pt
pt, que esta declarada en, que esta declarada en<sys/timeb.h> <sys/timeb.h> como sigue:como sigue: •
• struct timebstruct timeb
•
• {{
•
• time_t time_t time; time; /* /* Segundos Segundos desde desde epoca, epoca, igualigual
que
que `time'. `time'. */*/
•
• unsigned short int millitm; /* millisegundosunsigned short int millitm; /* millisegundos adicionales. */
adicionales. */
•
• short short int int timezone; timezone; /* /* Tiempo Tiempo local local medido medido enen
minutos oeste de GMT.*/
minutos oeste de GMT.*/
•
• short short int int dstflag; dstflag; /* /* No No cero cero si si se se usa usa horario horario dede
verano */
verano */
•
• };};
En caso de éxito, se devuelve el tiempo transcurrido en En caso de éxito, se devuelve el tiempo transcurrido en segundos desde la época. En caso de error, se devuelve segundos desde la época. En caso de error, se devuelve
((time_t)-1)
((time_t)-1)y se asigna a la vy se asigna a la v ariableariableerrno errno un valor un valor apropiado.
apropiado. •
• char *ctime(time_t *timep)char *ctime(time_t *timep)-- toma un argumento de tipo-- toma un argumento de tipotime_ttime_t (long integer) que representa el tiempo de calendadrio y lo convierte a (long integer) que representa el tiempo de calendadrio y lo convierte a una cadena de 26 caracteres de la forma producida por la función una cadena de 26 caracteres de la forma producida por la función
asctime()
asctime(). En primer lugar descompone los segundos a una. En primer lugar descompone los segundos a una estructura
estructuratm tm llamando allamando alocaltime()localtime(), y entonces llama a, y entonces llama a
asctime()
asctime()para convertir la estructurapara convertir la estructuratm tm a una cadena.a una cadena. •
• char *asctime(const struct tm *timeptr)char *asctime(const struct tm *timeptr)-- convierte un valor de-- convierte un valor de tiempo contenido en una estructura
tiempo contenido en una estructuratm tm a una cadena de 26 caracteresa una cadena de 26 caracteres de la forma:
de la forma:
ddd mmm dd hh:mm:ss aaaa ddd mmm dd hh:mm:ss aaaa La función
La funciónasctime()asctime()regresa un apuntador a la cadena.regresa un apuntador a la cadena.
19.2 Ejemplos de aplicaciones de funciones del tiempo.
19.2 Ejemplos de aplicaciones de funciones del tiempo.
Como se menciono previamente, básicamente existen tres posibles Como se menciono previamente, básicamente existen tres posibles usos de las funciones de tiempo.
usos de las funciones de tiempo.
19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.
19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo.
Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo en distintos momentos: en distintos momentos: /* timer.c */ /* timer.c */ #include <stdio.h> #include <stdio.h> #include <sys/types.h> #include <sys/types.h> #include <time.h> #include <time.h> main() main() { { int i,j; int i,j; time_t t1,t2; time_t t1,t2; (void) time(&t1); (void) time(&t1);
for (i=1; i<=300; ++i)
for (i=1; i<=300; ++i)
{
{
printf("%d %d %d\n",i, i*i, i*i*i );
printf("%d %d %d\n",i, i*i, i*i*i );
for(j=0; j<1000000; j++); /* Un pequeño retardo */
for(j=0; j<1000000; j++); /* Un pequeño retardo */
}
}
(void) time(&t2);
(void) time(&t2);
printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n",
printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n",
(int) t2-t1);
(int) t2-t1);
}
}
19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.
19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.
Se ha visto un ejemplo similar previamente, en esta ocasión se usa la Se ha visto un ejemplo similar previamente, en esta ocasión se usa la función
funciónlrand48()lrand48()para generar una secuencia de números:para generar una secuencia de números: /* random.c */ /* random.c */ #include <stdio.h> #include <stdio.h> #include <sys/types.h> #include <sys/types.h> #include <time.h> #include <time.h> main() main() { { int i; int i; time_t t1; time_t t1; (void) time(&t1); (void) time(&t1); srand48((long) t1); srand48((long) t1);
/* usar time en segundos para poner la semilla */
/* usar time en segundos para poner la semilla */
printf("5 numeros aleatorios (semilla = %d):\n",(int) t1);
printf("5 numeros aleatorios (semilla = %d):\n",(int) t1);
for (i=0;i<5;++i) for (i=0;i<5;++i) printf("%d ", lrand48()); printf("%d ", lrand48()); printf("\n\n"); printf("\n\n"); } } La función
La funciónlrand48()lrand48()devuelve enteros largos no negativosdevuelve enteros largos no negativos distribuidos
distribuidos uniformememnte uniformememnte entre entre 0 0 y y .. Una función similar es la función
Una función similar es la funcióndrand48 drand48 que regresa números deque regresa números de doble
doble precisión precisión en en el el rango rango ..
srand48()
srand48()pone el valor de la semilla para pone el valor de la semilla para estos generadores deestos generadores de números aleatorios. Es importante tener diferentes semillas cuando se números aleatorios. Es importante tener diferentes semillas cuando se llame a las funciones de otra forma el mismo conjunto números pseudo- llame a las funciones de otra forma el mismo conjunto números pseudo- aleatorios sera generados. La función
aleatorios sera generados. La funcióntime()time()siempre da una semillasiempre da una semilla única (siempre y cuando haya transcurrido por lo menos 1 segundo). única (siempre y cuando haya transcurrido por lo menos 1 segundo).
19.3 Ejercicios
19.3 Ejercicios
1.1. EscEscribribir un pir un progrogramrama en C qua en C que mide mida el tia el tiempempo de un fo de un fragragmenmento dto dee código en milisegundos.
código en milisegundos.
2.
2.
Escribir un programa en C para producir una serie de númerosEscribir un programa en C para producir una serie de números aleatorios de punto flotante en los rangos a) 0.0 - 1.0, b) 0.0 - n, donde aleatorios de punto flotante en los rangos a) 0.0 - 1.0, b) 0.0 - n, donde nneses cualquier valor flotante. La semilla deberá estar puesta para que se garantice cualquier valor flotante. La semilla deberá estar puesta para que se garantice una secuencia única.una secuencia única.
Subsecciones Subsecciones
•
• 20.1 Ejecutando comandos de UNIX desde C20.1 Ejecutando comandos de UNIX desde C •
• 20.220.2execl()execl() •
• • 20.420.4wait()wait() • • 20.520.5exit()exit() • • 20.6 Ejercicios20.6 Ejercicios
20. Control de procesos:
20. Control de procesos:
<stdlib.h><stdlib.h>,,
<unistd.h><unistd.h>Un
Un proceso proceso es básicamente un único programa ejecutándose. Estees básicamente un único programa ejecutándose. Este podría ser un programa del ''sistema´´ (por ejemplo,
podría ser un programa del ''sistema´´ (por ejemplo,login login ,,csh csh ,,
update
update, etc). un programa iniciado por el usuario (gimp o alguno hecho, etc). un programa iniciado por el usuario (gimp o alguno hecho por el usuario).
por el usuario).
Cuando UNIX ejecuta un proceso le asigna a cad proceso un número Cuando UNIX ejecuta un proceso le asigna a cad proceso un número único --
único -- process ID process ID oo pid pid .. El comando
El comando ps psde UNIX lista todos los procesos que se estánde UNIX lista todos los procesos que se están ejecutando en la máquina, listando también el
ejecutando en la máquina, listando también el pid pid .. La función de C
La función de Cint getpid()int getpid()regresará elregresará el pid pid de un proceso quede un proceso que llame a esta función.
llame a esta función.
Un programa usualmente ejecuta un sólo proceso. Sin embargo Un programa usualmente ejecuta un sólo proceso. Sin embargo despues se verá como se puede hacer que un programa corra como despues se verá como se puede hacer que un programa corra como varios procesos separados comunicados.
varios procesos separados comunicados.