Потому очень актуален счетчик трафика, желательно с предупреждениями. После долгих поисков нашел
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
нужно выделиь третью цифру с помощью регулярного выражения. Как это можно сделать?