Compiler les clients <<< |
Comment faire un client MySQL threadé | libmysqld , la bibliothèque du serveur embarqué MySQL >>> |
21.2 API MySQL C 21 API MySQL Manuel de Référence MySQL 4.1 : Version Française . Types de données de l'API C . Vue d'ensemble des fonctions de l'API C . Description des fonctions de l'API C . Fonctions C de commandes préparées . Types de données de l'API C . Présentation des fonctions de l'interface C . Descriptions des fonctions C pour les requêtes préparées . Gestion des commandes multiples avec l'interface C . Gestion des dates et horaires avec l'interface C . Description des fonctions threadées de C . Description des fonctions C du serveur embarqué . Questions courantes sur la bibliothèque C . Compiler les clients ->Comment faire un client MySQL threadé . libmysqld , la bibliothèque du serveur embarqué MySQL |
21.2.14 Comment faire un client MySQL threadé
La bibliothèque cliente est presque compatible avec les threads. Le problème le plus important est les routines de net.c qui lisent les sockets, et qui ne sont pas compatibles avec les interruptions. Cela a été fait en imaginant que vous souhaitiez vos propres alarmes, qui pourraient interrompre une lecture trop longue. Si vous installez des gestionnaires d'interruption pour l'alarme SIGPIPE , la gestion des sockets devraient être compatible avec les threads. Dans les anciennes versions binaires que nous distribuions sur notre site web, ( http://www.mysql.com/ ), les bibliothèques clientes étaient normalement compilées avec l'option de compatibilité avec les threads (les exécutables Windows sont par défaut compatible avec les threads). Les nouvelles distributions binaires doivent disposer des deux bibliothèques, compatibles ou non avec les threads.Pour obtenir une client threadé où vous pouvez interrompre le client avec d'autres threads, mettre des délais d'expiration lors des discussions avec le serveur MySQL, vous devriez utiliser les bibliothèques -lmysys , -lmystrings et -ldbug , ainsi que net_serv.o que le serveur utilise. Si vous n'avez pas besoin des interruption ou des expirations, vous pouvez compiler simplement une bibliothèque compatible avec les threads, (mysqlclient_r) et l'utiliser. Interface C . Dans ce cas, vous n'avez pas à vous préoccuper du fichier net_serv.o ou des autres bibliothèques MySQL.Lorsque vous utiliser un client threadé et que vous souhaitez utiliser des délais d'expiration et des interruptions, vous pouvez faire grand usage des routines du fichier thr_alarm.c . Si vous utiliser des routines issues de la bibliothèque mysys , la seule chose à penser est de commencer par utiliser my_init() ! Description des fonctions thréadées en C . Toutes les fonctions, hormis mysql_real_connect() sont compatibles avec les threads par défaut. Les notes suivantes décrivent comment compiler une bibliothèque cliente compatible avec les threads. Les notes ci-dessous, écrites pour mysql_real_connect() s'appliquent aussi à mysql_connect() , mais comme mysql_connect() est obsolète, vous devriez utiliser mysql_real_connect() ).Pour rendre mysql_real_connect() compatible avec les threads, vous devez recompiler la bibliothèque cliente avec cette commande :
Lorsque vous appelez mysql_init() ou mysql_connect() , MySQL va créer une variable spécifique au thread qui est utilisée par la libaririe de débogage (entre autres). Si vous appelez une fonction MYSQL, avant que le thread n'ai appelé mysql_init() ou mysql_connect() , le thread ne va pas avoir les variables spécifiques en place, et vous risquez d'obtenir un core dump tôt ou tard.Pour faire fonctionner le tout proprement, vous devez suivre ces étapes :
Vous pouvez rencontrer des erreurs à cause des symboles non définis lors du link de votre client avec libmysqlclient_r . Dans la plupart des cas, c'est parce que vous n'avez pas inclus la bibliothèque de threads dans la ligne de compilation. |
<< | Comment faire un client MySQL threadé | >> |
Compiler les clients | API MySQL C | libmysqld , la bibliothèque du serveur embarqué MySQL |