URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8459
[ Назад ]

Исходное сообщение
"C или С++, под FreeBSD"

Отправлено sav_83 , 03-Окт-09 14:22 
Здравствуйте.
Прошу извинить если повторяюсь или не там пишу.

Есть скрипт, писаный на PERL, в задачи которого входит с периодичностью считывать данные с log файла, вставлять их в БД MySQL и считанное удалять.
Если желание написать службу, которая бы:
1. слушала(перехватывала) поток и писала бы данные в БД;
2. писался/не писалcя log, в зависимости от заданных параметров в другом файле;
3. работал быстро. Скрипт может работать определенные секунды, а может поначалу медленно, но а потом время работы постепенно возрастает.
4. работал в "реальном времени" а не с периодичностью.

Вся загвоздка в том, ни разу такого не писал и не знаю ни на чем писать ни вообще с чего начать. Может есть где-нить дока какая по написанию служб вообще, короче нужна консультация и направление на "путь истинный"...
На счет выбора языка программирования. Где-то год назад знакомый сказал что С++ работает быстрее, месяц - два назад услышал опровержение, что все наоборот. Вот теперь и не знаю какой выбрать.

Содержание

Сообщения в этом обсуждении
"C или С++, под FreeBSD"
Отправлено Аноним , 03-Окт-09 17:31 
>Здравствуйте.

Здравствуйте.

>Вся загвоздка в том, ни разу такого не писал и не знаю
>ни на чем писать ни вообще с чего начать. Может есть
>где-нить дока какая по написанию служб вообще, короче нужна консультация и
>направление на "путь истинный"...

Если скрипт на перле писали вы, то будет немного проще. Почитайте книги по программированию в Unix/Linux. Могу порекомендовать "UNIX. Профессиональное программирование" Стивенса и Раго.

>На счет выбора языка программирования. Где-то год назад знакомый сказал что С++
>работает быстрее, месяц - два назад услышал опровержение, что все наоборот.
>Вот теперь и не знаю какой выбрать.

При сравнении C и C++ разница в скорости будет практически незаметна.


"C или С++, под FreeBSD"
Отправлено jd , 03-Окт-09 20:29 
Кто пишет лог в файл, который вы хотите обрабатывать?

А вообще, такие вещи обычно делаются с помощью syslog. И писать ничего не надо - всё уже написано.


"C или С++, под FreeBSD"
Отправлено angra , 03-Окт-09 23:57 
Зачем для такой задачи C/C++? Все делается на perl в два счета и работает с той же скоростью что на сях и даже асме. Попробуйте немного подумать и может быть сами поймете почему. А начинать надо с четкой постановки задачи.

"C или С++, под FreeBSD"
Отправлено vitek , 05-Окт-09 02:31 
есть такой вариант:
вместо лог-файла создаёте именованный канал с таким же именем (см. man mknod или man mkfifo)
после чего создаёте процесс-читатель, который заносит данные в б/д или ещё куда.
процессом-писатель при этом и не догадывается, что пишет не в обычный файл.
также man pipe, man tee и т.д. могут помочь с этим

"C или С++, под FreeBSD"
Отправлено ктото , 05-Окт-09 07:52 
Есть минус - при отваливании процесса-читателя процесс-писатель получает SIGPIPE.


"C или С++, под FreeBSD"
Отправлено vitek , 05-Окт-09 14:47 
>Есть минус - при отваливании процесса-читателя процесс-писатель получает SIGPIPE.

минусы есть всегда. значит надо писать так, чтобы не отваливался. :-D
если применять методы, как и при программировании серверов (листенеры, процессы, потоки, ipc), то получится если и не супер-надёжно, то уж приемлемо точно.

есть и другие варианты.
если бы не указанный в топике бзд, можно было бы предложить Inotify http://ru.wikipedia.org/wiki/Inotify
также есть вариант с fuse. написать для него фс не так сложно, как кажется.


"C или С++, под FreeBSD"
Отправлено vitek , 05-Окт-09 17:30 
ах да.
может там вообще хватит что-то типа такого:
tail -f <log_file> | <своё_скрипт_записи_в_субд>
и никакого С ;-)

"C или С++, под FreeBSD"
Отправлено аноним , 05-Окт-09 17:50 
> Где-то год назад знакомый сказал что С++ работает быстрее, месяц - два назад услышал опровержение, что все наоборот.

C++ разумеется быстрее. Только толку от этого, если большую часть работы будет все равно выполнять mysql, а приложение будет чуть более чем ве время висеть в ожидании данных? А разработка на C++ медленнее, особенно если вы сами не понимаете что вам нужно. Поэтому оставьте на perl + прикрутите Proc::Daemon и все остальное чего не хватает по вкусу.