Подсчет трафика для домашнего пользователя (vnstat + простейший интерфейс)

Модератор: Модераторы разделов

keleg
Сообщения: 286
ОС: MagOS 2010.2

Подсчет трафика для домашнего пользователя

Сообщение keleg »

У меня на беспроводном Интернете лимит - 150мб в день, дальше дорого.
Потому очень актуален счетчик трафика, желательно с предупреждениями. После долгих поисков нашел
vnstat - он есть для 2010 мандривы.
Настроил, прописал в cron - все работает, но надоедает каждый раз лазить в консоль чтобы узнать, сколько еще осталось.
Интерфейса не нашел, пришлось писать самому.
Не пинайте сильно - моя первая программа на C, два убитых вечера :-)
Просто выдает во всплывающем tray-хинте чуть отgrepанный результат вызова vnstst в терминале.
GTK т.к. под LXDE предназначено


Код: Выделить всё

#include <gtk/gtk.h>
#include <string.h>

namespace gtk_vnstat
{
    GtkStatusIcon *tray_icon;

}

using namespace gtk_vnstat;


static char* get_net_stat()
{
    char buf[500];
    FILE *ptr;

    memset(buf, 0, sizeof(buf));

    if ((ptr = popen ("vnstat | grep today", "r")) != NULL && (fgets (buf, 500, ptr) != NULL) && !pclose(ptr))
        return strdup(buf);
    else
        return '\0';
}

static void update_tooltip(GtkStatusIcon* tray_icon)
{
    gtk_status_icon_set_tooltip(tray_icon, get_net_stat());
}


void tray_icon_on_click(GtkStatusIcon *tray_icon, gpointer user_data)
{
    update_tooltip(tray_icon);
}


static GtkStatusIcon *create_tray_icon() {

    tray_icon = gtk_status_icon_new();
    g_signal_connect(G_OBJECT(tray_icon), "activate", G_CALLBACK(tray_icon_on_click), NULL);
    gtk_status_icon_set_from_icon_name(tray_icon, GTK_STOCK_MEDIA_STOP);
    gtk_status_icon_set_tooltip(tray_icon, "Статистика не получена");
    gtk_status_icon_set_visible(tray_icon, TRUE);
    update_tooltip(tray_icon);

    return tray_icon;
}

void tray_icon_cleanup()
{
    if (tray_icon)
    {
        g_object_unref ((GObject *)tray_icon);
        tray_icon = NULL;
    }
}

static gboolean time_handler(GtkStatusIcon* tray_icon)
{
    update_tooltip(tray_icon);
    return TRUE;
}


int main( int   argc, char *argv[] )

{
    gtk_init (&argc, &argv);

    GtkStatusIcon* tray_icon = create_tray_icon();

    g_timeout_add(60000, (GSourceFunc) time_handler, (gpointer) tray_icon);

    gtk_main ();

    return 0;
}


Ну так вот - хотелось бы более точно выделить из результата, выдаваемого vnstat цифры трафика, чтоб предупреждения сделать.
Регулярные выражения не настолько знаю, чтоб нормально grep написать, а возиться со строками C уже успел устать :-)
Строка, выдаваемая программой
today 21.26 MiB | 1.86 MiB | 23.12 MiB | 2.64 kbit/s
нужно выделиь третью цифру с помощью регулярного выражения. Как это можно сделать?
Спасибо сказали:
keleg
Сообщения: 286
ОС: MagOS 2010.2

Re: Подсчет трафика для домашнего пользователя

Сообщение keleg »

И еще вопрос - как обычно в линуксах решаются подобные, в общем-то скриптовые задачи?
В KDE понятно, виджет пишется. а в gnome-lxde?
Спасибо сказали: