Архив рубрики: C++

Форк db2dhcp

Есть такой проект db2dhcp, автором к сожалению заброшенный, но выложенный с исходными кодами. Фактически это dhcp сервер, с возможностью выборки из БД MySQL или Postgree различных критериев для отдачи. Например: выдача определенному свичу, определенному порту определенного IP, В основном этот проект конечно интересен мелким провайдерам или крупным организациям.. Что не умеет делать этот проект? А не умеет писать в БД историю авторизации. Вот это я и поправил. Плюс добавил возможность сборки по FreeBSD 10. Скачать можно здесь: https://github.com/donpadlo/dhcp2db

 

 

Удаление пробелов из строки С++

Часто бывает необходимо при обработке  результата вывода выполнения консольных программ, убрать все пробелы из строки. Стандартного решения (ктоб сомневался!) в с++ нет. Пишем свой велосипет.

string trim(string ss){
 int i=0;
 string st=""; 
 while(i!=ss.length()-1){
   if(ss[i]!=' '){st+=ss[i];};
   i++;
 };    
 return st;
};

Возврат динамического массива из функции. C++

Задача: обьявить суперглобальный динамический массив, в который попадают значения из функции.

Решение:

struct tars{
    int tar_id;
    string tar_name;
    int fixshape;
    int used;
    int maxspeed;
    int onlytar;
};
tars *gtars;
tars *GetTarifsFromNoc(){
   tars *noctar=new tars[cnttar];
   noctar[counttar].fixshape=atoi(row[5]);
   noctar[counttar].onlytar=atoi(row[10]);
   return noctar;
};
int main(int argc, char** argv) {
   gtars=GetTarifsFromNoc();
   return 0;
}

Ошибка “Syntax error: Bad fd number” при вызове функции system c++

При вызове:

system("ipfw pipe list >& pipe.lst");

Вызывает возврат с ошибкой «Syntax error: Bad fd number»

Та же самая команда, выполненная на прямую в консоли, выполняется без ошибок. ОС FreeBSD. Необходимо записать в файл результат выполнения ipfw pipe list, включая stderr

Как костыль отлавливаю код возврата system. Но не хорошее решениие для меня, т.к. вижу код, но не вижу текста ошибки..

C++ и компиляция проекта используещего mysql под FreeBSD

1290897526_freebsd2Вот она! Рыба моей мечты. Почти 2 дня мучений, чтоб подобрать состав ключей для компиляции!

g++ -o shaper main.cpp -lmysqlclient -I/usr/local/include/mysql -I/usr/local/include/ -L/usr/local/lib/mysql

Порядок включения библиотек в проект:

#include<iostream>
using namespace std;

#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <cstring>
#include <fstream>
#include <sstream>
#include <math.h>
#include <my_global.h>
#include <mysql.h>

Как в конечном итоге оказалось, порядок включения, тоже очень важен. В самом верху  iostream, затем обьявляем пространство имен std,  затем все остальные библиотеки. Причем те которые с расширением *.h рекомендуют опускать в самый низ. Причем под Ubuntu компилировалось всё без проблем сразу, и в любом порядке. А вот со FreeBSD ыли вот такие пляски с бубном.