Thread View: es.comp.os.linux.programacion
3 messages
3 total messages
Started by David Serrano (Hue-Bond)
Sun, 31 Jul 2005 22:13
Pasar estructura de datos dinámica a otro proceso
Author: David Serrano (Hue-Bond)
Date: Sun, 31 Jul 2005 22:13
Date: Sun, 31 Jul 2005 22:13
27 lines
2133 bytes
2133 bytes
Buenas. Tengo un programita en C con varias estructuras de datos, la mayoría son estáticas pero tengo un par de ellas que son dinámicas (que todavía no he implementado pero creo que haré con un array de estructuras). Quiero pasarlas todas a otro proceso mediante algún mecanismo de IPC como memoria compartida o sockets. Con las estáticas es sencillo: memcpy (puntero_a_memoria_compartida, &estruct, sizeof (estruct)); Mi problema es que no puedo hacer eso con un puntero (el que apunta a la estructura dinámica) porque el tercer parámetro sería sizeof(puntero) y entonces no copiaría mucho, que digamos. ¿Cómo puedo hacerlo? Además, el otro proceso debe saber cuántos miembros tiene el array, así que debo pasarle el número aparte como un int. Así, la memoria compartida quedaría de esta forma: <datos estáticos><núm. de dinámicos><dinámico 1><dinámico 2>..<dinámico N> Esto me parece un poco chapucilla... ¿hay alguna otra forma? -- David Serrano
Re: Pasar estructura de datos din�mica a otro proceso
Author: Oscar Garcia
Date: Sun, 31 Jul 2005 22:32
Date: Sun, 31 Jul 2005 22:32
53 lines
3554 bytes
3554 bytes
El Sun, 31 Jul 2005 22:13:28 +0000 (UTC), "David Serrano (Hue-Bond)" <responder_solo_en_el_grupo@yahoo.es> escribi�: >Mi problema es que no puedo hacer eso con un puntero (el que apunta a la >estructura din�mica) porque el tercer par�metro ser�a sizeof(puntero) y >entonces no copiar�a mucho, que digamos. �C�mo puedo hacerlo? Lo ideal es que envies directamente la direcci�n a donde apunta tu puntero y la longitud de la estructura. De este modo enviar�s los datos reales y no el puntero. >Adem�s, el otro proceso debe saber cu�ntos miembros tiene el array, as� que >debo pasarle el n�mero aparte como un int. As�, la memoria compartida >quedar�a de esta forma: ><datos est�ticos><n�m. de din�micos><din�mico 1><din�mico 2>..<din�mico N> >Esto me parece un poco chapucilla... �hay alguna otra forma? Si has estudiado la torre de protocolos ISO de OSI ver�s que est� definido en la capa de presentaci�n (nivel 6). �Qu� lenguaje de programaci�n usas? Presupongo que C por el memcpy que haces. En ese caso te recomiendo que te crees un modelo de datos abstracto que sea consistente y que se acomode a tus necesidades. Por ejemplo. Si usas un modelo basado en listas enlazadas para obtener el n�mero de elementos debes recorrer toda la lista hasta que llegues al �ltimo eslab�n de la cadena y te diga "ya no quedan m�s datos" (casi siempre marcado por un puntero al siguiente elemento NULL). Cuando ese valor es necesario que se conozca muchas veces y ante gran cantidad de datos entonces quiz� debieras crearte dos tipos de datos, un "contenedor" de la lista en el que se almacena la cantidad de elementos de la misma y que se actualiza en cada operaci�n de borrado o inserci�n, y por otro lado el tipo de datos que contendr� realmente la informaci�n (generalmente en forma de lista enlazada). El "contenedor" deber�a apuntar al primer elemento de la lista. A la hora de enviar los datos a trav�s de un socket entonces debes plantearte un protocolo de nivel 6 que encapsule tus datos y que los convierta en "multiplataforma" (conversi�n de las cadenas de caracteres a UTF-8 por ejemplo, bits en datos enteros en orden de red, etc) aparte de marcar el comienzo de una estructura, su tama�o y contenido, marcas de inicio y final de volcados de datos, etc... Un saludo. -- �scar Javier Garc�a Baudet LinaresDigital http://redstar.linaresdigital.com/
Re: Pasar estructura de datos dinámica a otro proceso
Author: Carlos
Date: Sun, 31 Jul 2005 22:36
Date: Sun, 31 Jul 2005 22:36
38 lines
2456 bytes
2456 bytes
David Serrano (Hue-Bond) wrote: > Buenas. > > Tengo un programita en C con varias estructuras de datos, la mayoría son > estáticas pero tengo un par de ellas que son dinámicas (que todavía no he > implementado pero creo que haré con un array de estructuras). Quiero ¿Un array de punteros a estructuras? > pasarlas todas a otro proceso mediante algún mecanismo de IPC como memoria > compartida o sockets. > > Con las estáticas es sencillo: > > memcpy (puntero_a_memoria_compartida, &estruct, sizeof (estruct)); > > Mi problema es que no puedo hacer eso con un puntero (el que apunta a la > estructura dinámica) porque el tercer parámetro sería sizeof(puntero) y > entonces no copiaría mucho, que digamos. ¿Cómo puedo hacerlo? memcpy(p_a_m_c, p, sizeof(*p)) o memcpy(p_a_m_c, p, sizeof(struct el_tipo)) > Además, el otro proceso debe saber cuántos miembros tiene el array, así que > debo pasarle el número aparte como un int. Así, la memoria compartida > quedaría de esta forma: > > <datos estáticos><núm. de dinámicos><dinámico 1><dinámico 2>..<dinámico N> > > Esto me parece un poco chapucilla... ¿hay alguna otra forma? No sé por qué te parece chapucilla... es un protocolo tan bueno como cualquier otro. Lo chapucilla sería no mantener las funciones que leen y escriben en el mismo archivo para que no queden desincronizados los cambios, y esas cosas, pero como protocolo, si no se necesita más, ¿para qué hacerlo más complicado? Saludos.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads