C/Visual C - Utilizar una unica conexion (a mysql) desde dos ej

 
Vista:

Utilizar una unica conexion (a mysql) desde dos ej

Publicado por william (8 intervenciones) el 20/07/2006 14:35:43
Saludos y de antemano gracias.

Utilizo:

redhat enterprise linux 4
Mysql
lenguaje C

Descripcion:

Tengo dos ejecutables.

Ejecutable 1.

Crea una conexion al mysql, y deja en una porcion de memoria compartida la direccion de la conexion (MYSQL *), y un valor correspondiente a un telefono.

Conexion = mysql_init(NULL);
mysql_real_conect(conexion,ip,usuario,clave,bd,0,NULL,0);

Pone en la memoria compartida el valor de

conexion, y un telefono

Ejecutable 2.

Lee de la memoria compartida la conexion y el telefono y ejecuta una consulta de actualizacion sobre la conexion recogida.

mysql_query (ConexionRecogida,"update Nombres set telefono = 'TelefonoRecogido' where nombre ='carlos' ");

- Bien, el manejo de la memoria compartida funciona correctamente pues recojo los valores correspondientes a la conexion y el telefono.

- Realizo los cast correspondientes
(MYSQL*) conexion;

El problema esta en que al ejecutar el mysql_query, da violacion de segmento, no se si el Mysql permite utilizar la misma conexion (MYSQL *) desde dos ejecutables o que puede ser el problema. he probado todo esto desde un solo ejecutable y funciona corecctamente.

att William
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Utilizar una unica conexion (a mysql) desde dos

Publicado por chuidiang (73 intervenciones) el 21/07/2006 07:31:39
Hola:

En una memoria compartida no puedes dejar en general un puntero. Un MYSQL *, al igual que cualquier otro puntero, no es más que una dirección de memoria donde hay unos datos.

Cuando el segundo proceso recoge esa dirección de memoria, recoge un valor entero que apunta a una zona de memoria del primer proceso y la interpreta como si fuera una dirección de memoria propia. No tiene acceso a los datos apuntados por ese puntero porque pertenecen al otro proceso, o bien está intentando acceder a su propia zona de memoria a un sitio donde hay cualquier cosa, de ahí el segmentation fault, core dumped.

Podrías intentar meter en memoria compartida una estructura MYSQL con todos sus datos, en vez de el puntero. Sin embargo, probablemente tampoco eso te funcionará. Es posible que la estructura MYSQL tenga a su vez punteros dentros y además, una conexión abierta (fichero, base de datos, socket o lo que sea) suele llevar asociadas más cosas de las que se encarga el sistema operativo, cosas que en el segundo proceso no estarían al no haber abierto él la conexión.

En fin, lo mejor es que en la memoria compartida dejes datos de la conexión como "servidor de bd", "base datos", "usuario", "password", etc (lo que es la cadena de conexión) y que el segundo proceso abra su propia conexión.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Utilizar una unica conexion (a mysql) desde dos

Publicado por William (32 intervenciones) el 02/08/2006 12:30:01
Gracias he aclrador el funcionamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar