Запись в базу данных mysql с одноплатного компьютера с помощью c
Я хотел бы прочитать сетевые пакеты с одноплатного компьютера в базу данных (точнее, mysql), код для связи между одноплатным компьютером и mysql должен быть написан на c. Пожалуйста, мне нужна ваша помощь в получении полезных ссылок на некоторые материалы в Интернете, так как я пытался найти полезную информацию, но пока не дал никакого результата. Спасибо за Ваше понимание.
2 ответа
Вам необходимо установить первый пакет libmysqlclient-dev (я полагаю, вы находитесь под Linux) в вашей системе, затем вы можете изменить этот код в соответствии с вашими потребностями:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <mysql/mysql.h>
#define BUFFER_SIZE 1024 // Increase this buffer if yoy want
/* This function is used for the database connection */
MYSQL * my_mysql_connection(const char *server, const char *db, const char *user, const char *pwd)
{
MYSQL *myh;
/* Some initialisation */
if (NULL == (myh = mysql_init(NULL)))
{
fprintf(stdeee, "Fails to allocate memory for MYSQL!\n");
exit (EXIT_FAILURE);
}
/* Connect to the database. */
if (NULL == mysql_real_connect (myh, server, user, pwd, db, 0, NULL, 0))
{
fprintf(stderr, "%s", mysql_error(myh));
free (myh);
return NULL;
}
return myh;
}
/* This function is used to perform a query */
int my_mysql_query(MYSQL *myh, const char *query)
{
/* Do the query request */
if (0 != mysql_query(myh, query))
{
fprintf(stderr, "FAIL to perform the query : '%s' %s\n", query, mysql_error(myh));
exit (EXIT_FAILURE);
}
return 0;
}
/*
* Suppose that your table students_table has this fields : student_number, student_name,
* student_address, student_phone
*/
/* This function is used to get and process the result of the query */
void my_mysql_process_query_result(MYSQL * myh)
{
int num_fields;
int i;
MYSQL_RES *query_result;
MYSQL_FIELD *field;
MYSQL_ROW row;
char *buffer;
buffer = (char *) calloc(BUFFER_SIZE, sizeof(char));
/* Select all students present in the students_table */
if (my_mysql_query(myh, "SELECT student_number, student_name, student_address, student_phone FROM students_table"))
{
exit (EXIT_FAILURE);
}
query_result = mysql_store_result (myh);
/* Retreive the number of rows and fields */
field = mysql_fetch_fields(query_result);
num_fields = mysql_num_fields(query_result);
/* construct the buffer containing each row */
while ((row = mysql_fetch_row (query_result)))
{
/* Init our buffer with fields sperated by ";", modify if you need, it's just an example */
memset(buffer, '\0', sizeof*buffer);
for (i = 0; i < num_fields - 1; i++)
{
strncat(buffer, row[i], strlen(row[i]) + 1);
strncat(buffer, ";", 2);
}
strncat(buffer, row[i], strlen(row[i]) + 1);
strncat(buffer, "\n", 2);
// You can process your buffer (row) here
process_student_row(buffer);
}
free(buffer);
mysql_free_result (query_result);
}
Не забудьте указать ссылку на библиотеку mysqlclient: -lmysqlclient
,
Редактировать:
Вы можете установить libmysqlclient-dev (http://packages.debian.org/squeeze/libmysqlclient-dev) в Debian следующим образом:
sudo apt-get update
sudo apt-get install libmysqlclient-dev
Вы можете скомпилировать вашу программу следующим образом:
gcc -Wall my_msql_program.c -o my_mysql_program -lmysqlclient
Если mySQL работает на обычном ПК, вам необходимо обмениваться данными между одноплатным компьютером и обычным ПК, чтобы данные, которые вы хотите, передавались с платы на ПК. Вам понадобится какой-нибудь сервер на ПК. После этого ПК получает данные и, используя mySQL C API, передает их в базу данных mySQL.
Я могу быть не прав, но вы можете быть над головой. Общий дизайн прост, и если он не очевиден для вас, возможно, вы пытаетесь сделать что-то слишком сложное.