LINUX.ORG.RU

Сообщения Vinick

 

востановление файла, SVN, riserfs

ПАМАГИТЕ!!!
сделал 
$svn add directory
А когда оно вместе с объектниками добавило, плохо подумал и сделал
$svn remove --force directory

И теперь этого каталога нет ни в репозитории, ни на диске...
Можно как-то востановить каталог? там всего один важный файл.
файловая система riserFS 
Vinick
()

высокопроизводительный сетевой сервер

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

Есть ли какие-то секреты при написании таких програм? Есть ли системное ограничение на максимальное количество одновременных соединений у процесса и можно ли его преодолеть?

Если кто писал что-то подобное, поделитесь пожалуста опытом.

Сейчас этот мультиплексор реализован в виде одного процесса который делает внутри себя select и последовательно обрабатывает данные от каждого клиента, но при таком подходе уже при 100 клиентах начинаются проблемы с производительностью.

Vinick
()

SMP и потоки

Столкнулся с проблемой.
вот код
struct work_t
{
  std::deque<int> data;
  boost::mutex * mutex;
};

std::vector<work_t> work_data;
void worker (const int & n)
{
  std::ofstream ostr(...);
  while(!stop)
    {
      int s = 0;
      {
      boost::mutex::scoped_lock lk(*(work_data[n].mutex));
      if(!work_data[n].data.empty())
	{
	  s = work_data[n].data.front();
	  work_data[n].data.pop_front();
	}
      }
      if(s != 0)
	{
	  do_some_work(s);
	}
      if(have_results)
        {
           write_results(ostr);
        }
    }
}


int main()
{
  //...
  // Заполнение и инициализация массива work_data
  //..
  boost::thread_group grp;
  for(int i=0;i<nthread;++i)
    {
      grp.create_thread(boost::bind(&worker,i));
    }
  grp.join_all();
  //...
}
Каждый поток работает со своей порцией данных.
mutex защищающий данные  потока, на данный момент, всегда свободен. Т.е. поток никогда не должен в нем засыпать.
Если я запускаю 4 потока на машине с AMD Athlon64  3000, то в htop 
видно что все потоки находятся в состоянии R и отбирают 100% 
процессорного времени, которое делится между потоками. Вроде все 
нормально. 

Но если эти же 4 потока, на тех же самых данных запустить на 4-х 
процессорной машине с DualCore Opteron 875, то загрузка на всех 
процесорах не превышает 50% и одновременно работает только 1 или 2 
потока остальные висят в состоянии D (насколько я понял это означает 
что поток заблокирован).

Кто-нибудь может мне объяснить с чем связано такое поведение?
Хочется все-таки загрузить машину по полной.
Vinick
()

ifstream и eof()

вот такая ситуация
---------------------------
$ ls -l
-rwxr-xr-x 1 vinick vinick 9935 2006-10-26 01:21 test
-rw-r--r-- 1 vinick vinick  253 2006-10-26 01:21 test.cpp
-rw-r--r-- 1 vinick vinick  108 2006-10-26 00:01 test.in
$ cat test.cpp
#include <fstream>
#include <iostream>
int main(int argc,char **argv)
{
  std::ifstream istr(argv[1]);
  char c;
  int cnt=0;
  while(!istr.eof())
    {
      istr.read(&c,sizeof(char));
      cnt++;
    }
  std::cout << cnt << std::endl;
  return 0;
}
$ ./test test.in
109
-------------------
получается что eof устанавливается только после попытки чтения несуществующего байта? Это что так и должно быть?
Vinick
()

Web программирование

Есть у меня несколько машин в локальной сетке на которых запускается ряд обычных приложений. Сейчас управление этими приложениями происходит по алгоритму - зашел по ssh на машину 1, поправил конфиг приложения А, запустил приложение А, зашел на машину 2, поправил конфг приложения Б, запустил приложение Б.... зашел на машину 1, посмотрел лог работы приложения А... и так каждый день.

Надоело уже! :) Хочу сделать централизованный интерфейс управления всем этим хозяйством и желательно через Web а-ля webmin. Но не знаю с какой стороны к этому подойти. Всю сознательную жизнь писал на С++ и только немного знаю Perl и азы HTML.

Посоветуйте, какие инструменты, языки и библиотеки можно использовать для моей задачи. Хотя бы с какими ключевым словами можно в гугл лезть? Все машины, в том числе и та, на которой будет установлено это Web-приложение, работают под Linux.

Vinick
()

Beryl - белый экран

Собрал beryl-0.1.0 и emerald из svn. При запуске, после показа сплэша, экран становиться белым, видны только тени. Эфекты работают, можно покрутить куб, по Alt-Tab видно окно переключения окон. Откатился на compiz и cgwd, все работает нормально. Кто-нибудь сталкивался с подобным. Debian/Etch, Xorg 7.0, видеокарта Ati X550. дрова 8.28

Vinick
()

импорт формул из MS Word в OO Writer

Если импортировать документ MS Word содержащий математические формулы в ОпенОфис, то вместо символа суммы получю большую букву 'е', точка (умножение) заменяется на 'Ч'. Ну и еще кое-где по мелочам.

Кто-нибудь знает как с этим бороться? OpenOffice.org 2.0

Vinick
()

Oblivion + Cedega

Кто-нибудь запускал Oblivion от 1С под Cedega? Раскажите как сделали? Моя конфигурация AMD64 3000+ 1Gb RAM Video Radeon x550 128 Mb. (driver 8.26.18) Cedega 5.2.1

Если просто запустить из по GUI Oblivion Launcher то в окне ланчера ни одна кнопка не реагирует на мышь. Скачал последний oldblivion, распаковал в каталог установки, сделал ярлык на oldblivion.exe. oldblivion вобще не запускается. Нашел файлик oldblivion.exe.log в нем запись "что-то instalation path.FAILED". В гугле по этой строке нашел ссылку на какой-то форум, где описывалась такая-же проблема но под виндами - там грушили что в реестре был неправильно указан путь к каталогу oblivion. у себя проверил - вроде все нормально.

Что делать не знаю... поиграть хочется. ПС: под виндой идет приемлемо.

Vinick
()

[SHELL] чтение из сокета (netcat)

Необходимо из скрипта читать и записывать в файл данные получаемые от сервера. Сервер перед отправкой данных требует подписки. 
Т.е. протокол такой
to server> REQUEST DATA1
to server> REQUEST DATA2
from server> DATA DATA1
from server> DATA DATA2
...
from server> DATA DATA1
from server> DATA DATA2
...

Пробовал прикрутить netcat, но он получает EOF из STDIN обрывает соединение. т.е ни 
echo "request_string" | netcat host port > out
ни
netcat host port < file_reqest > out
не работают.

Можно ли что-нибудь сделать используя стандартные утилиты ?
Самому писать клента на С (а других языков я толком не знаю) не хочется.



 

Vinick
()

GCC vs Intel C++

Услышал я тут что Intel C++ может генерить более оптимальный код, и
 решил попробовать. Установил себе триальную версию 9.0. Заменил в makefile 
g++ на icpc, добавил в опции компилятора -O2 и -static (тесты проводятся
 на машине где нет icc и без -static он ругается на отсутствие 
динамических библиотек), пересобрал, запустил и тихо офигел.
Вместо полутора минут на gcc-3.3.3, получилось 12!!! замеры проводились 
обычным  time.


Что я неправильно сделал? могло повлиять на быстродействие использование -static ?

Еще, при компиляции icpc выдал кучу remark в основном на тему:

remark #981: operands are evaluated in unspecified order
remark #383: value copied to temporary, reference to temporary used

Может ли это влиять на скорость?

Есть ли вобще какие-нибудь рекомендации по переводу проекта с gcc на Intel C++?


Vinick
()

сравнение знаков чисел.

как максимально быстро выяснить совпадение знаков у двух чисел типа long?

Vinick
()

выбор C++ Matrix Library

Ищу высокопроизводительную библиотеку на С++ для работы с матрицами и решения СЛАУ. Необходимо как можно быстрее решать СЛАУ с размерностью от 30 до 100.

Я раньше немного работал только с TNT+Jama. Сейчас вот еще рассматриваю MTL и uBlas.

Может кто-нибудь помочь с выбором?

Vinick
()

куда девается своп?

вот такой вывод top
Mem:   1034000k total,   642856k used,   391144k free,    35708k buffers
Swap:  1052216k total,    33604k used,  1018612k free,   259492k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP DATA COMMAND
22373 vinick    25   0 2175m 289m 1324 R 99.9 28.7 144:22.86 1.8g 2.1g proga

может кто-нибудь объяснить - почему Mem(used)+swap(used) = 660mb, хотя 
как я понимаю должно быть не менее 2175mb.

Куде девается 1.8g свопа? в /dev/null? 
может быть ответ на этот вопрос поможет понять откуда вобще берется такой перерасход.
Vinick
()

Память SDRAM DIMM 256 + 32

у меня стояла планка SDRAM DIMM pc-133 256 метров. Недавно нашел еще планку на 32 метра. Так вот если воткнуть одновременно обе планки, то система распознает только 256 метров (хотя биос вроде говорит что занято слота DIMM). Если по отдельности, то все нормально - или 32 или 256.

Может кто-нибудь посоветовать как быть?

Vinick
()

mktime и struct tm

Объясните пожалуста, что означает поле tm_isdst в структуре tm и на что оно влияет при использовании mktime.

Cмотрю в man и ничего не могу понять.

Vinick
()

XEmacs, *.h и с++-mode

Как заставить XEmacs автоматически включать c++-mode при открытии *.h файлов, у меня запускается c-mode?

Слышал когда-то, что он может читать информацию об используемом mode из специально подготовленного заголовка в начале файла, но не могу найти описание.

Vinick
()

Выделение имени файла на shell

Потребовалось в shell выделить из полного пути только имя файла без 
расширения. После долгих и мучительных раздумий удалось родить вот 
такое:
i="/home/user/work/data/abcd.dat"
fil=`echo $i | awk -F/ '{print $6}'`
name=`echo $fil | awk -F. {print $1}'`

в итоге  namе="abcd", что мне и надо.
Есть ли более простые и универсальные способы? Мне не нравится то что 
нужно знать уровень вложености файла относительно корня.


Vinick
()

максимальный объем выделенной памяти

А сколько максимально можно выделить памяти через malloc, если установлено 4гига оперативной памяти и размер свопа можем считать неограниченым(настолько большим, что хватит всем процессам)? 3 гига? 4?

Vinick
()

бинарное представление чисел

Насколько такое решение будет кросс-платформеным
template <typename T>
union TVal
{
  T val;
  char rep[sizeof(T)];
};
template <typename T>
ostream & operator <<(ostream &ostr, const TVal<T> & t)
{
  return ostr.write(t.rep,sizeof(T));
}
template <typename T>
istream & operator >>(istream &istr,TVal<T> & t)
{
  return istr.read(t.rep,sizeof(T));
}

Если запись будет происходить в Linux,а чтение в Windows.
Есть ли другие варианты?
Vinick
()

std::getline

 Или лыжи не едут или ... других вариантов нет :)

читаю C++ Standard Library, The: A Tutorial and Reference Nicolai M. Josuttis
Там в разделе про string написано
[Цитата]
istream& getline (istream& strm, string& str)
istream& getline (istream& strm, string& str, char delim)

Read the characters of the next line from strm into the string str.
All characters (including leading whitespaces) are extracted until any of the following happens:
    * strm. width() is greater than 0 and width() characters are sored
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
    * strm.good() is false (which might cause an appropriate exception)
    * delim or strm. widen('\n') is extracted
    * str.max_size() characters are stored

[/Цитата]

Ага.. пишу:

std::ifstream in("file.txt");
while(!in.eof())
    {
        string s;
        in.width(2);    
        if(std::getline(in,s))
           std::cout<<s<<std::endl;
        else
          break;
        }

и вместо того чтобы читать в s по 2 символа, getline все равно читает пока не встретит конец строки или eof.

Что такое? в книге ошибка или у меня getline неправильный?
gcc version 3.4.2 (mingw-special).
Vinick
()

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