LINUX.ORG.RU

Сообщения aido

 

LibreOffice + i3

Доброго времени суток!

У меня одного при открытии lowriter в i3 и нажатии на кнопку «Файл» прога перестает подавать признаки жизни, отрисовка основного окна не работает? Помогает только killall oosplash.

 ,

aido
()

Двойные скобки С++

Доброго времени суток!

Как сделать так, чтобы в прогах можно было пользоваться синтаксисом наподобие boost::bind: boost::bind(compare, _1, _2)(a, b);?

То есть как писать функции с двумя скобками f(a)(b)?

 

aido
()

GSL. MSVS O_O

Доброго времени суток!

появилась потребность собрать GSL (желательно, последнюю версию) под MSVS 2013. Я не в зуб ногой во вражеских технологиях, тем более, в MSVS, да и в инете не нашлось годной информации по сборке: все, что удавалось найти - не работало или не собиралось. Есть ли у кого ПОДРОБНЕЙШИЕ маны по сборке сего чуда божественного под иноземской вражеской системой?

 ,

aido
()

Глупый вопрос о подключении библиотек g++

Доброго времени суток!

подскажите, как сказать g++, чтобы он подключал статическую версию библиотеки вместо динамической при линковке?

Также интересует, как можно сказать программе не использовать libstdc++ и libgcc_s (ну или статически их подключить).

 

aido
()

Latex. Как нарисовать таблицу с рисунком?

Доброго времени суток!

Требуется сделать таблицу 5*3, причем первые два столбца должны иметь разделительные линии, а внутри последнего столбца должно находится изображение. Ну или подойдет вариант такой: слева таблица 5*2, справа изображение.

Как?

 

aido
()

многопоточное программирование. join

Доброго времени суток!

Задача такова: допустим, у нас есть (запущено) несколько потоков, каждый из которых, естественно, может завершиться в любой момент времени. Есть родительский для них процесс, который хочет вовремя определять, когда и кто из них остановился и при необходимости сразу перезапустить. Если бы у нас был один поток, то достаточно было бы простого join, но в случае нескольких - первый join должен заблокировать поток выполнения родительского процесса, пока не завершится первый поток и в этом случае остальные джоины не сработают. Решение вида «на каждый новый поток создавать еще поток-контролёр», конечно, сработает, но выглядит как-то вычурно и, подозреваю, что в нем тоже будут недостатки (поток сможет создать дочерний поток???).

Я где-то заблуждаюсь или эту задачу можно решить только используя процессы? В общем, как она решается?

 

aido
()

Аналог шаблонов для языка С.

Доброго времени суток!

Столкнулся с проблемой написания структуры с переменной длиной поля. На С++ код пишется элементарно и выглядит как:

template <uint8_t len> struct TPack{
	char Length=len;
	char Item[2];
	char Value[len];
};

Не спорю, что можно бы выделить под Value аж 256 байт, коих с головой хватит под нужную строку, но это требуется для того, чтобы максимально снизить количество передаваемой информации. И не объявлять же под каждую передаваемую связку Item-Value новую структуру нужного размера (Хотя с точки зрения компилятора С++, каждое новое использование шаблона именно это и подразумевает)!

Может, в сях есть уже готовые структуры подобного вида, но мне они не известны.

 ,

aido
()

libdaemon как тян. не нужна?

Доброго времени суток!

После написания функционала демона решил покопаться в репозиториях в поисках готовых решений и нашел небольшую библиотечку libdaemon, в которой в принципе весь нужный функционал есть. Но вот вопрос: почему ни один пакет в системе от нее не зависит и разработка ее давно прекращена? такое ощущение, что каждый разработчик пишет демона для своих целей с нуля. Еще большим вопросом стало: почему systemd ее никак не использует, учитывая, что и то, и другое было разработано Поттерингом и ее функционал в systemd вроде бы лишним не является? Почему все признали ненужность этой либы?

 

aido
()

JXOS. Что за зверь?

Доброго времени суток!

Кто-нибудь имел с JXOS дело? Какие плюсы-минусы можете о ней сказать? На встраиваемых системах оно как себя показывает? Время запуска Java-машины как обычно оставляет желать лучшего? Последний апдейт ее был 8 лет назад.

 

aido
()

В каких случаях приходится писать модули ядра?

Доброго времени суток!

Собственно, сабж. Допустим, у меня есть девайс, который общается с компом по USB и, в принципе, библиотеки libUSB хватает с избытком. Какая извращенная задача должна прийти в голову, чтобы пришлось забыть о (libUSB+прошивка девайса) и работать на уровне ядра?

То же касается любой другой шины.

 

aido
()

Кто быстрее: сURL или сокеты (С++)?

Доброго времени суток!

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

Чтобы больше прояснить ситуацию, скажу, что демон будет принимать и отсылать сообщения небольшого размера (<= 512 байт + заголовок) по протоколу FTP. От него требуется устойчивость при разрыве, расширяемость (кто знает, какие опции в будущем придется добавить, но размер сообщения больше 512 байт не станет, может ключ шифрования придется увеличить) и высокая скорость работы.

Из чего вопрос: легкая расширяемость сURL - большее преимущество, чем высокая скорость работы сокетов для данной задачи или нет? В смысле, скорость сильно должна пострадать при выборе cURL?

 , ,

aido
()

Смешанная компиляция. Как g++ подключает объектные файлы gcc?

Доброго времени суток!

Столкнулся с проблемой смешанной компиляции на gcc/g++. Приложение компилится нормально, даже с флагами -Wall -pedantic существенных ворнингов не выдает, но после запуска сразу же вылетает, при этом об ошибке не говорит. Когда запускаю в gdb, говорит, что произошел сегфолт на вызове стандартной функции:

Program received signal SIGSEGV, Segmentation fault.
_IO_vfprintf_internal (s=0x0, format=0x402248 "%s I'm here", ap=0x7fffffffe460) at vfprintf.c:1278
1278	vfprintf.c: Нет такого файла или каталога.

Также, если забыть про GCC и все компилить в G++, поправив файлы (забыть про cfunctions, внести эти функции в daemon.cpp), то все запускается и работает.

Ах да, вот файл проекта.

Подскажите, где косячит сборка?

 , ,

aido
()

Чтение конфигов

Доброго времени суток!

А какие стандартные линуксовые средства есть для парсинга конфигов? Настало время изучить flex + bison или Libboost? Или есть еще что-то более стандартное?

 

aido
()

Класс-наследник разучился писать логи.

Доброго времени суток!

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

Хм... наверное, проще показать код:тыц!

Если в 27 строчке файла main.cpp заменить TUSB_Daemon на TDaemon, то логи вестись будут (где? - смотрим в файле usb_daemon_conf.h). За ведение логов отвечает функция WriteLog, которая вообще к классу не относится. То же самое относится и к cout в дочернем процессе, даже если STDOUT_FILENO не закрыт.

При этом компиляция проходит успешно. Объясните, пожалста, почему магия наследования не работает?

 , ,

aido
()

C++ Изучаю наследование классов.

Доброго времени суток!

Вот код базового класса и класса наследника:

daemon.hpp:

class TDaemon{
	protected:
		static char ConfigFileName[128];
	public:
		TDaemon(const char* ConfigName);
		~TDaemon(){ };
                virtual void DaemonFunction(unsigned int, void*);
};
usb_daemon.hpp:

class TUSB_Daemon : public TDaemon{
	private:
		
	public:
		void DaemonFunction(unsigned int, void*);
		TUSB_Daemon(const char* ConfigName) : TDaemon(ConfigName){};
};

Конструктор TDaemon определен в файле daemon.cpp.

Почему линкер выдает такую ошибку?

usb_daemon.o:(.rodata._ZTI11TUSB_Daemon[_ZTI11TUSB_Daemon]+0x10): undefined reference to `typeinfo for TDaemon'
daemon.o: In function `TDaemon::TDaemon(char const*)':
/home/igor/templates/daemon/src/daemon.cpp:235: undefined reference to `vtable for TDaemon'
main.o: In function `TDaemon::~TDaemon()':
/home/igor/templates/daemon/src/daemon.hpp:35: undefined reference to `vtable for TDaemon'
collect2: error: ld returned 1 exit status

Все ж вроде корректно объявлено?

 , ,

aido
()

Установка Lubuntu 15.04 на флэшку

Доброго времени суток!

Собственно, сабж. Загрузочную флэшку уже делаю далеко не первый раз и каждый раз как заново.

Что имеем: USB Flash 3.0, таблица разделов GPT, присутствуют файловые системы FAT32, ext4, NTFS.

Как записывал: пробовал писать на раздел c FAT32 и через Unetbootin, и через dd if=./lubuntu.iso of=/dev/sdb1 bs=512

Что получал: в обоих случаях при загрузке пишет Missing operating system. При подключении флэшки в б-гомерзкую винду, она определяла три раздела, но дико глючила с их типами: FAT32 и ext4 вообще не определила, а NTFS определила как FAT32, и не смогла смонтировать ни один раздел. Таблицу разделов и разбивку диска делал через Gparted.

Из-за чего такие феерические глюки и как оно исправляется?

 , ,

aido
()

Посылка сигнала процессу

Доброго времени суток!

Пишу класс для демона, в функционал которого входит обработка различных сигналов, в частности SIGUSR1. Когда посылаю kill 10 PID, то демон штатно завершается, вместо того, чтобы этот сигнал обработать.

Вот кусок кода, ответственный за обработку этого сигнала:

for (;;)
        {
            // ждем указанных сообщений
            sigwait(&sigset, &signo);
            WriteLog("%s [MONITOR] Received signal: %d %d\n", getTime(), signo, SIGUSR1);//для проверки
            // если то сообщение обновления конфига
            if (signo == SIGUSR1)
            {
                // обновим конфиг
                status = ReloadConfig();
                if (status == 0)
                {
                    WriteLog("%s [DAEMON] Reload config failed\n", getTime());
                }
                else
                {
                    WriteLog("%s [DAEMON] Reload config OK\n", getTime());
                }
            }
            else // если какой-либо другой сигнал, то выйдем из цикла
            {
                break;
            }
        }

В логе при этом следующий вывод: 17:58:42 [MONITOR] Received signal: 15 10

Как так получается, что я посылаю 10 сигнал, а демон принимает 15?

 , ,

aido
()

C++ Криво работает вывод в файл

Доброго времени суток!

Есть 2 функции:

static char Time[10];

char* getTime()
{ //функция возвращает форматированное время
	bzero(Time, 10);
	time_t seconds = time(NULL);
	tm* timeinfo = localtime(&seconds);
	strncpy(Time,asctime(timeinfo)+11,9);
	return Time;
}

void WriteLog(const char* str, ...)
{
    FILE * lf;
    lf=fopen(LOG_FILE,"a");
    fprintf(lf, str); //печатаем в файл
    fclose(lf);
}

Используются они так: WriteLog("%s [DAEMON] Started, %d\n", getTime(), 125);

А в файл приходит следующее: /*кракозябры*/[DAEMON] Started, 1088

Косяк однозначно в fprintf и использовании функции от нескольких аргументов, но я пока хз, как поправить его.

 ,

aido
()

Как сделать кнопку опций наверху?

Доброго времени суток! Собственно, сабж..

Как сделать эту самую кнопку сверху (ну та, которая обычно обозначается на Андроиде с тремя горизонтальными полосками, при нажатии на нее обычно Popup(?)Menu вылазит с опциями разного рода) вместе с заголовком приложения стандартными средствами QT?

Мне на ум приходит только идея в лоб: создать QLabel, QButton, настроить выравнивание и растяжение через политики, но в Android Studio, помнится, есть уже готовый компонент под это дело. А в QT есть?

 ,

aido
()

Одновременное подключение к двум WiFi сетям с одного адаптера.

Возможно ли одновременно подключаться к двум вайфаям? В интернете мнения расходятся кардинально - присутствуют варианты ответов «да», «нет», «можно при наличии двух вайфай-адаптеров», и нигде нет ссылок на то, почему можно или нельзя (например, на соответствующую главу стандартов группы 802.11).

Например, почему ОС не может подключиться сначала к одной сети, запомнить параметры сети, потом к другой, опять запомнить, а дальше принимать решение по какому каналу передавать или посылать пакет? Понимаю, что в таком случае одновременно принимать и посылать пакеты с двух/на две точки становится невозможно (нужна синхронизация), но вроде все должно работать, если последовательно обрабатывать пакеты. Например, если стоит задача делать Download строго с одной сети, а Upload строго в другую. При такой постановке в адаптер вроде не должно одновременно поступать два сигнала и конфликтов тоже быть не должно.

 

aido
()

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