LINUX.ORG.RU

Сообщения Krivenok_Dmitry

 

syslog remote logging

Hello!

Есть несколько устройств, на которых настроено логгирование через
syslog на удалённый сервер.

Мне же хочется настроить с этого сервера пересылку сообщений на
другой сервер (на нём я хочу поставить сборщик UDP-дейтаграмм
от syslog'а, который будет писать их в Oracle).

Я почитал man на syslogd и не нашёл как можно указать порт, на
который пересылать данные (там предполагается, что пересылка идёт
на другой syslog).
Как можно это сделать?

И можно ли вообще реализовать данную схему?
В том же man'e написано:
With  normal  syslogds  you  would  get  syslog-loops if you send out messages that were received from a
       remote host to the same host (or more complicated to a third host that sends it back to the  first  one,
       and  so  on).   In my domain (Infodrom Oldenburg) we accidently got one and our disks filled up with the
       same single message. :-(

       To avoid this in further times no messages that were received from a remote host are sent out to another
       (or the same) remote host anymore.
Krivenok_Dmitry
()

Проблема с alarm

Представим себе ситуацию, когда есть библиотечная функция, в которой
подряд идут несколько блокирующих системных вызовов (например read).

void foo()
{
  ...
  read(...); // First call
  ...
  read(...); // Second call  
  ...
}

Для меня критично, чтобы вызов этой функции уложился в 3 секунды:
alarm(3);
foo();
alarm(0);

Обработчик сигнала ALRM определён пустым.

Проблема в том, что сигнал ALRM прервёт 1-й read (вызов вернёт ошибку
и errno станет равно EINTR).
Но если функция не обрабатывает эту ситуацию, то она _навсегда_
зависнет во втором вызове read!

Т.к. речь идёт о произвольной библиотечной функции, то нельзя делать
предположений о количестве блокирующих системных функций в ней.

Как решать подобную проблему (т.е. гарантированно прервать вызов 
произвольной функции)?
Krivenok_Dmitry
()

Винду в Питере купить не просто

Возникла необходимость поставить Win XP.
Диска естественно у меня не было и я решил скачать
ISO-ку в муле.
Скачал, записал, начал ставить.
Инталлер завис с чёрным экраном почти в самом начале.

Дело было срочное и я решил не париться с выкачиванием 
(на 256k это не быстро), а заплатить 100 рублей в ближайшем
магазине.

Это оказалось сложнее чем я думал - я был на 4-х точках в
радиусе 500 метров от дома и НИГДЕ нет диска с виндой!

Зато есть диски типа
"Лучшие программы для Linux" и "Сборник лучших игр для Linux"

Конечно где-нибудь у метро винду купить ещё можно, но факт остаётся 
фактом.

Может я отстал от жизни, т.к. софт не покупаю уже года 3, но
ситуация странная - раньше винду у нас на каждом шагу продавали.

P.S.
Знакомый виндузятник так прокомментировал эту историю:
"Просто на виндоус спрос колоссальный - сносят с прилавков
в тот же день"
Krivenok_Dmitry
()

Книги по Matlab

Скоро нужно будет сделать пару проектов в Matlab'e.
Я уже начал его изучать - почитал доку, позапускал демки и т.д.
Дока мне очень понравилась.

Соответственно есть вопрос к опытным товарищам - нужно ли покупать
книги по Matlab?
Или в них приводится просто перевод доки?

Какие хорошие книги порекомендуете?
Krivenok_Dmitry
()

The Future of C++ ?

Прочитал тут рассказ одного канадского препода:

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/03bf2257d69f12
a2/4d8b02a50f27e437?lnk=raot&hl=en#4d8b02a50f27e437

Куда катится этот мир...
Krivenok_Dmitry
()

Почему aMule качает некоторые файлы бесконечно?

Наблюдаю странную картину в aMule.
Загрузка файла доходит до 100% и потом он вновь загружается с нуля.
И так до бесконечности.

В чём дело?
Krivenok_Dmitry
()

Вклад Коши в математику

Привет!

Может кто встречал хорошую инфу по теме?
В google я нашёл несколько сайтов, но 
1) На них одна и та же инфа
2) Очень примитивно описано (родился, умер, задача и теорема Коши).

Википедия также не рулит в этом вопросе.
Krivenok_Dmitry
()

Кто юзал ADAPTIVE Communication Environment (ACE)?

Как ощущения?
Стоит ли изучать?
Krivenok_Dmitry
()

C++: Скомпилируйте тестовую программку pls

#include <iostream> 

struct Foo 
{ 
  Foo() : x(2) {} 
  int x; 
}; 

struct Bar : public Foo 
{ 
  Bar() : x(3) {} 
  int x; 
}; 

int main() 
{ 
  Bar bar[100]; 
  Foo* p = bar; 
  int total = 0; 
  for( int i = 0; i < 10; ++i ) 
    total += p++->x; 
  std::cout << total << std::endl; 
  return 0; 
}


Интересно, у кого-нибудь будет total != 25 ?

P.S.
Фокус тут в p++.
Krivenok_Dmitry
()

Книга «Шаблоны C++. Справочник разработчика»

Ищу subj в электронном виде на русском.

P.S.
Печатная русская и электронная английская книги у меня есть.
Krivenok_Dmitry
()

Ищу инфу по CMMI

Привет!

У меня есть книга в электронном виде:

CMMI for Systems Engineering/Software Engineering/Integrated 
Product and Process Development, Version 1.02

Две главы из неё (~70 стр) мне нужно перевести и вставить в 
доклад (это никто и никогда не будет читать :)).
Естественно очень лень переводить. Да и времени жалко.

Вопрос: 
Есть ли у кого инфа по теме на _русском_ языке?

Спасибо!
Krivenok_Dmitry
()

Как прибить recvfrom по таймауту в многопоточном коде?

Проблема в следующем:
...
rc = recvfrom(...); // Блокирует тред
...

Я знаю решения проблемы, но вот как в тредах их применять...
1) alarm
Просто делаем alarm(TIMEOUT) и ловим errno==EINTR.
Это работает хорошо в однопоточных программах, но возникает вопрос -
какой тред получит SIGALARM? Да и как вообще обрабатывать сигналы
в тредах, ведь action'ы вроде задаются на процесс, а на тред
только маски.
2) MSG_DONTWAIT
Задать неблокирующее чтение и ловить EAGAIN.
При этом вызывать нужно в цикле и делать какую-то (хоть даже малую)
задержку.
Возникает вопрос - как делать задержку?
Ведь select(1,0,0,0,&timeout) в тредах вроде тоже вызывать нельзя
(not thread safe).
А задержка с дискретом в секунду меня не устроит.
3) select
Not thread safe. 
4) SO_SNDTIMEO / SO_RCVTIMEO
После вот таких описаний желание использовать пропадает:

SO_{SND,RCV}TIMEO are probably the most widely
unimplemented, or strangely/incompatibly implemented, of all
common sockopts in existence... Basically, in short, NEVER
try to use them for anything... ;-)

Короче - как _грамотно_ решается подобная задача?

Спасибо!
Krivenok_Dmitry
()

C: difftime не работает

Hello!

Вот программка:

#include <time.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  time_t start = time(0);
  sleep(3);
  time_t curr = time(0);
  printf("Start = '%lu'\n", start);
  printf("Current = '%lu'\n", curr);
  printf("Diff = '%lu'\n", difftime(curr, start));
}

Почему у меня такие результаты:

Start = '1163336224'
Current = '1163336227'
Diff = '1163336224'

Я ожидал Diff = '3'

Спасибо!
Krivenok_Dmitry
()

BubbleSort, ShellSort, QuickSort + Threads

Привет!

Есть задача:
Организовать сортировку массива методами Шелла, Хоара, пузырька в
разных потоках.

Сами алгоритмы тривиальны, но вот реализация их с использованием
нескольких потоков для меня не так очевидна.

Начнём с QuickSort.
Здесь всё совершенно понятно, т.к. имеет место быть _полная_
параллельность по данным (левая и правая, относительно
опорного элемента, части массива не пересекаются).

А вот с BubbleSort и ShellSort всё несколько сложнее.
BubbleSort можно свести к простой рекурсии, но работа всегда
будет происходить с одной частью массива (т.е. в одном треде)!

В ShellSort мы сперва делаем [log2(n/2)] шагов парных перестановок
и затем приходим к BubbleSort.
Хотя перестановки также параллельны по данным, целесообразность
выполнения перестановки 2-х элементов в отдельном треде вызывает
сомнения (даже только переключение контекста будет стоить дороже).

Объясните мне pls как же можно прикрутить многопоточность к 
этим двум сортировкам. Может я чего не понимаю?

P.S.
Как наверное стало понятно из условия - это задачка из универа.
У меня нет возможности уточнить условие задачи (я вообще располагаю
только её формулировкой).
Поэтому у меня закралось сомнение - а может на самом деле нужно
просто отсортировать один и тот же (возможно очень большой) массив
в разных тредах используя разные методы? 
Например для того, чтобы узнать какой метод быстрее (хотя это и так
понятно).
Krivenok_Dmitry
()

Шкаф настоящих программистов

Krivenok_Dmitry
()

Как нужно собрать kpdf, чтобы он мог корректно копировать русский текст из pdf'ки?

Привет!

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

В чём может быть проблема?
Не включено что-то при сборке? Или трабла со шрифтами/кодировками?

Спасибо!
Krivenok_Dmitry
()

Posix Threads + sleep/select

Привет!

sleep и select блокируют весь процесс, а не отдельный тред (так
мой эксперимент показывает).
Есть ли способ организации таймаута в треде (желательно с дискретом
меньше одной секунды). 

Спасибо.
Krivenok_Dmitry
()

Задачка

Привет!

Есть задачка.
Имеется процесс, производящий чтение из некоторого абстрактного 
буфера (это может быть например буфер приёма UDP и т.п.)
За один раз из буфера процесс читает один пакет данных.
Скорость записи в буфер может быть очень большой и если процесс 
не будет успевать читать пакеты, то они будут пропадать безвозвратно.
Соответственно идеальной будет следующая схема работы:
...
...
while(1)
  {
    pkt = ReadPktFromBuf();
    WritePktToQueue(pkt);
  }
...
...

Здесь только что прочитанный пакет сразу же (_без_ всякой обработки)
пришется в некоторую очередь.
Т.о. риск потери пакетов сведён к минимуму.

Предполагается, что другой процесс (возможно дочерний к данному)
будет читать данные из очереди и обрабатывать их.

Вопрос:
Какими средствами IPC можно эмулировать данную абстрактную очередь
так, чтобы время записи в неё было минимальным?
При этом у другого процесса должна быть возможность читать из начала
очереди.
Krivenok_Dmitry
()

Samsung ML-2015 A4, 1200x600dpi, 20 ppm, LPT/ USB - кто-нибудь заживлял его под Linux?

Я в раздумьях - брать его или нет.

В списке девайсов его нет:
http://www.linuxprinting.org/printer_list.cgi?make=Anyone

Однако на сайте производителя пишут, что Linux поддерживается.

Какие ощущения от девайса?
Krivenok_Dmitry
()

Проблема с XOpenDisplay + xdm/kdm

Hi!

Сейчас ищу ошибку в коде backend'а KDM'a (он же вообщем-то XDM).
Имеются странные баги.
С клиента запускаю Xorg -query <IP сервера>.
На сервере запушен KDM.
Всё хорошо работает, появляется KDM greeter, я логинюсь, захожу в KDE.
Чудеса появляются после того, как я выхожу из сессии KDE.
По правилам Xorg должен переподключиться к KDM'у по XDMCP, что он и
делает.
Последовательность установки соединения следующая:
-------                               --------
| KDM |                               | Xorg |
-------                               --------
                    query
               <---------------
 
                   willing
               ---------------->
 
                    request
               <---------------
 
                   accept
               ---------------->
 
                    manage
               <---------------

После того, как KDM получает manage, он выполняет XOpenDisplay
(всё это естественно в дочернем процессе).
Так вот, если при первом (успешном) логине XOpenDisplay возвращает
валидный display и затем запускается функция ManageSession (которая
запускает greeter и осуществляет что-то типа "dispatch loop"),
то при втором запуске XOpenDisplay зависает (не возращает управление).
Почему это может происходить???

А затем происходит совсем непонятная вешь - от XOrg'а снова приходит
query! Т.е. происходит новая установка соединения по XDMCP!
А в спецификации протокола XDMCP чётко сказано - при получении manage
убить все активные сессии.
Именно это и делается таким вот кодом в функции manage:
if ((d = FindDisplayByName( name )))
  {
    Debug( "terminating active session for %s\n", d->name );
    StopDisplay( d );
  }

Если раскрутить StopDisplay, то станет ясно, что оттуда посылается
SIGTERM дочернему процессу (тот который завис в XOpenDisplay).

Далее всё описанное выполняется в цикле.
И greeter вообще не появляется.

Воспрос - почему происходит второе подключение (при зависшем первом)?
Если обобщить, то получим что имея n-ое зависшее подключение 
обязательно получим n+1, которое и прибъёт n-ое на шаге manage.


Также я дебажил код Xorg'а и в нём дошёл до системного вызова read().
Он в то же самое время возвращает -1, errno = ECONNRESET!
Т.е. получает RST сегмент по tcp (tcpdump подтверждает).

Есть идеи?
Krivenok_Dmitry
()

RSS подписка на новые темы