[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