LINUX.ORG.RU

Сообщения T-34

 

Алгоритм поиска

Нужно организовать поиск объекта по его уникальному номеру(id). Скорость очень критична. Если вместо всяких там бинарных деревьем использовать просто массив. например:

struct hz *hzarr[100000];

struct hz *find(id){

if(arr[id] != NULL){ return arr[id] }else{ return NULL; } }

Какие минусы, кроме того что транжирю память?

>>>

T-34
()

Лимит файловых дескрипторов

Позникла следующая проблема: в tcp-серевере, при кол-ве открытых файловых дескрипторов чуть больше 1000 вылетаю в сигфолт. Если быть точным:

New connection on socket 1013
Client Number: 1008

Листинг валгринда:

==14742== Warning: invalid file descriptor 1019 in syscall accept()
==14742==
==14742== Process terminating with default action of signal 11 (SIGSEGV)
==14742== Access not within mapped region at address 0x206
==14742== at 0x407522D: getenv (in /lib/libc-2.8.so)
==14742== by 0x40CE666: (within /lib/libc-2.8.so)
==14742== by 0x40CE9FC: tzset (in /lib/libc-2.8.so)
==14742== by 0x40D4AAF: (within /lib/libc-2.8.so)
==14742== by 0x410CCE6: __vsyslog_chk (in /lib/libc-2.8.so)
==14742== by 0x410D1DA: syslog (in /lib/libc-2.8.so)
==14742== by 0x80492C0: addEpollEvent (listener.c:23)
==14742== by 0x8049661: Listener (listener.c:163)
==14742== by 0x27B: ???

Если я правильно понял то достигаю лимита на дескрипторы,
но как вычислять ошибку? как определить что accept() возвращает левый дескриптор? И как перешагнуть лимит?

>>>

T-34
()

malloc проблема

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


int newClient(int sock){

CLIENT *client;
client = malloc(sizeof(struct CLIENT)); //<--сигфолт

.....
.....

return 0;
}

CLIENT это структура, если разместить эти две строчки кода, например в функции main то память выделяется нормально. В чем может быть проблема?

>>>

T-34
()

Как писать тип данныйх float в бинарный файл?

Нужно писать/читать массив чисел float в бинарный файл... Какие будут предложения?

>>>

T-34
()

проверка указателя

Как проверить указатель на валидность перед тем как скормить его free()???

>>>

T-34
()

выделение памяти и структуры

Есть структура:

struct BUFF {
int len;
char *buf;
}

Есть функция A которая должна возвращать указатель на структуру BUFF.

Я делаю так:

#define SIZE 16

struct BUFF *a(){

struct BUFF *buff;
buff = malloc(sizeof(struct BUFF));

buff->buf = calloc(SIZE, sizeof(char));
buff.len = SIZE;

return buf;
}

Функция B освобождает память:

void b(struct BUFF *buff){

free(buff->buf);
free(buff);
}

Правильно я делаю? Или память для структуры можно не выделять malloc, а просто обьявить ее? Когда в таком случае освободится память, занимаемая структурой?

>>>

T-34
()

openssl генерация RSA ключей

Я генерю пары ключей функцией:

RSA *rsa; rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);

Для сохранения их в файл можно вызвать PEM_write_RSAPublicKey() Но эта функция записывает ключ не в сыром виде, а в Base64 представлении.

Как получить ключ в виде char масива?

>>>

T-34
()

epoll где пощупать?

Подскажите openSource проекты использующие epoll для отслеживания событий на сокете.

>>>

T-34
()

один сокет два порта! как?

Возможно ли слушать два порта одним сокетом?

>>>

T-34
()

нужен алгоритм

Есть два списка данных, описаных структурой:

typedef struct list
{
char param[20]; //для параметра
char value[5]; //для значения
struct list *n //указатель на следующий элемент списка
} dl;

Список А содержит пары данных ПАРАМЕТР и ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Список Б содрежит пары ПАРАМЕТР и ПОЛЬЗОВАТЕЛЬСКОЕ ЗНАЧЕНИЕ
Количество элеменотов в списке Б меньше или равно количеству элементов в списке А.

Если b.param == a.param присваиваем a.value = b.value;

Как максимально эффективно найти нужные пары?

>>>

T-34
()

Eclipse падает это что?

после того как прогресс-бар на заставке доходит до 100% появляется окно с надписью:

JVM terminated. Exit code=1 /usr/bin/java -Xms128m -Xmx256m -Djava.library.path=/usr/lib -jar /usr/lib/eclipse-3.3/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828. jar -os linux -ws gtk -arch x86 -showsplash -launcher /usr/lib/eclipse-3.3/eclipse -name Eclipse --launcher.library /usr/lib/eclipse-3.3/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.2.R 331_v20071019/eclipse_1021.so -startup /usr/lib/eclipse-3.3/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828. jar -exitdata 2b000a -vm /usr/bin/java -vmargs -Xms128m -Xmx256m -Djava.library.path=/usr/lib -jar /usr/lib/eclipse-3.3/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20070828. jar

Что это? Gentoo, Eclipse 3.3.1.1

>>>

T-34
()

java, узнать откуда выполнен вызов функции

Нужно узнать откуда вызывают определенную функцию? Способ не важен, либо с помощью отладчиков, либо размещением кода в самой функции(если такое возможно).

>>>

T-34
()

chroot()

Где можно почитать про реальзацию chroot() в самой программе? А то возникает уйма вопросов, например если у меня есть открытые файлы и я выполню chroot() что будет?

>>>

T-34
()

su в программе

Как сменить пользователя от которого работает приложение? В моем случае служба...

>>>

T-34
()

Помогите с алгоритмом

Есть алгоритм оснаванный на XOR который шифрует буфер с данными raw, ключем ecx. Помогити написать алгоритм расшифровки.
int pos = 0;
int ecx = 0x33333333;
unsigned char raw[]= {0x55, 0x75, 0x3f, 0x00, 0xe6, 0x74, 0x09, 0x01};

edx = (raw[pos] & 0xFF);
edx |= (raw[pos+1] & 0xFF) << 8;
edx |= (raw[pos+2] & 0xFF) << 16;
edx |= (raw[pos+3] & 0xFF) << 24;

ecx += edx;
edx ^= ecx;

raw[pos++] = (edx & 0xFF);
raw[pos++] = (edx >> 8 & 0xFF);
raw[pos++] = (edx >> 16 & 0xFF);
raw[pos++] = (edx >> 24 & 0xFF);

>>>

T-34
()

GCL как lisp-машина

Прикрутил к Apache lisp_mod2, для его работы необходима lisp-машина. Возможно запустить gcl как демон или он работает только из консоли?

>>>

T-34
()

Чем трафик считать на Linux?

Задача подсчета трафика на маршрутизаторе. Узал ipcad и trafd неудовлетворило. Что посоветуете?

>>>

T-34
()

dovecot

Проблема следующая... Поднимаем mail cервер без системных учеток, через в базу на MySQL

Exim + dovecot

Exim раскладывает входящую почту в /var/mail/exim/user@doamain Права на папку с почтой пользователя 600 mail mail Тоесть Exim работает с провами пользователя mail

Но dovecot не удается заставить работать из под этого же пользователя.... в чем может быть трабл??? В лог пишет:

Logins with login process UID 8 (user admin@doamin) not permitted (see login user in config file)

>>>

T-34
()

Трабл с cron

Gentoo, vixie-cron. Проблема следующего характера, в /etc/crontab воспринимается только первая строка:

* * * * * root /bin/echo `date` >> /tmp/crontest.log
*/2 * * * * root /bin/echo `date` >> /tmp/crontest2.log #это уже не работает.

>>>

T-34
()

Потоки или асинхронные сокеты?

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

T-34
()

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