[C con Clase] Memoria en paráemtros de execv...
Programante
programante en gmail.com
Dom Abr 11 23:50:29 CEST 2010
El 11/04/10 18:54, Gilberto Cuba Ricardo escribió:
> Hola Lista,
>
> Hace poco empiezo a trabajar con la función que hago referencia en
> el asunto del email (execv), que ejecuta un proceso creado
> anteriormente con fork(), en linux, pero que para ello necesita de
> dos parámetros, el primero una cadena terminada en '\0' con la
> ubicación y nombre del programa, y por segundo parámetro un arreglo
> con los parámetros que se la pasarán al programa.
>
> En efecto esto no es problema, ni mi duda, sino que para ello debo de
> crear digamos, o así es por lo menos como yo lo hago, en una función
> externa, que manipula los parámetro y se los pasa a execv, pero que
> en ese proceso reservo un poco de memoria para algunas
> variables que necesita la función, y me encuentro que durante la
> ejecución, cuando se ejecuta esa línea, si todo sale bien, sale de
> la función que lo contiene. Y mi duda surge aquí, ¿qué pasa con toda
> la memoria que yo había reservado para pasársela a la función execv?
> ¿queda sin liberar o ella automáticamente la libera?
>
> O tal vez alguien me pudiera dar otra pista de como implementar esto
> de forma tal que no se quede colgado ese espacio de memoria
> reservado.
>
Se libera. execv destruye todo el proceso, de modo que esa memoria también
se libera. Las únicas cadenas que se pasan del padre al hijo son los
argumentos
del programa y las variables del entorno (y son copias, la cadena
original se
libera -o puede ser liberada-). Los que sí puedes tener que liberar son los
descriptores de fichero abiertos (a menos que los hayas marcado como
cloexec).
Más información sobre la lista de distribución Cconclase