LINUX.ORG.RU

Избранные сообщения xperious

Задание тестовое по сям

Форум — Development

Есть вот такое задание:

Тестовое задание №2

Разработать консольное серверное приложение работающее в среде ОС LINUX на пользовательском уровне. Приложение должно 
генерировать последовательность целых чисел, состоящую из 3-х
 подпоследовательностей, каждая из которых представляет собой 
целочисленный неотрицательный 64-х битный счетчик. Для каждой 
такой подпоследовательности начальное значение и шаг между двумя
 соседними значениями задается пользователем произвольно. 

Формат задания параметров – простой текст в tcp/ip сокет (для проверки используется telnet-клиент). 
  
Перечень команд 
  
1.	seq1 xxxx yyyy (задать начальное значение = xxxx и шаг = yyyy для первой подпоследовательности); 
2.	seq2 xxxx yyyy (задать начальное значение = xxxx и шаг = yyyy для второй подпоследовательности); 
3.	seq3 xxxx yyyy (задать начальное значение = xxxx и шаг = yyyy для третьей подпоследовательности); 
4.	export seq - выдавать в сокет каждому клиенту сгенерированную последовательность. 
  
Примечания 
  
1.	Если в командах 1, 2, 3 любой из параметров (начальное значение и/или шаг) будет указан как = 0, 
то программа не должна учитывать данную подпоследовательность; 
2.	При переполнении счетчика подпоследовательность должна начинаться сначала; 
3.	Формат передаваемых по сети данных – 64-х битные целые числа (binary data); 
4.	Программа не должна аварийно завершать работу в случаях некорректно введенных параметров, 
аварийного завершения работы клиента и т.д; 
5.	Язык для разработки – C, компилятор GCC, в проекте должен присутствовать Makefile; 
6.	Для создания/управления потоками, списками, примитивами синхронизации и т. п. можно использовать сторонние библиотеки. 
  
Примеры входных и выходных данных 
  
1.	seq1 1 2 – задает подпоследовательность 1, 3, 5 и т.д; 
2.	seq2 2 3 – задает подпоследовательность 2, 5, 8 и т.д; 
3.	seq3 3 4 – задает подпоследовательность 3, 7, 11 и т.д; 
4.	export seq – в сокет передается последовательность 1, 2, 3, 3, 5, 7, 5, 8, 11 и т.д. 


Мне вроде понятно все кроме проверки сокета телнетом? и вывода под номером 4


[i]Перемещено jollheef из general[/i]

 

Gremlin_
()

QMetaObject::invokeMethod - поясните работу

Форум — Development

Добрый день в документации Qt про QMetaObject::invokeMethod (http://doc.qt.io/qt-5/qmetaobject.html#invokeMethod) есть пункт:

If type is Qt::QueuedConnection, a QEvent will be sent and the member is invoked as soon as the application enters the main event loop.


Вопрос: что за QEvent будет послан и куда?

 , , ,

rumgot
()

Посоветуйте тулзу для реагирования на алерты Prometheus и события systemd

Форум — Admin

Привет.

Продолжаем цикл тупых вопросов про мониторинг подкроватного сервера. Дисклеймер: я не профессиональный админ. Нет смысла бить меня тапками за то, что у меня дома нет стоечного железа за сотни нефти с четырёхкратным резервированием всего подряд, или что у меня нет времени и желания разбираться с каким-нибудь заббиксом и писать тонны наколеночных скриптов.

Собственно, есть недосервер, собранный из очень херового железа (вследствие чего какие-то его части регулярно отваливаются) и исполняющий очень херовый софт (который тоже регулярно отваливается, течёт и сегфолтится).

Сейчас я юзаю Netdata с кастомными плагинами + Prometheus + Alertmanager + Grafana. С помощью регулярных выражений и такой-то матери кое-как отконвертил встроенную библиотеку алертов Netdata в формат Prometheus, настроил репортинг на почту + SMS, вроде норм.

Однако, я замечаю, что моя реакция на большинство событий крайне однообразна. Например, если диск уже полминуты репортит 100% загруженности, а количество операций в секунду - 0, значит, подвис SATA-контроллер и его нужно перезапустить. А если не помогло или скрипт вернул 1, то нужно эскалировать алерт до критического.

Я хочу это автоматизировать. Посоветуйте что-нибудь.

Есть ещё одна хотелка, слабо связанная с предыдущей. У меня есть какое-то количество действий, которые выполняются по крону или по более сложным триггерам. Я постоянно логинюсь на сервер только затем, чтобы посмотреть в логи на предмет того, не сфейлилось ли что-нибудь из них, и это тоже хочется автоматизировать.

Поскольку они все оформлены в виде systemd-юнитов, задача упрощается: нужен софт, который будет мониторить события запуска/остановки systemd-юнитов, собирать их логи из journald и что-нибудь с ними делать (например, отсылать на почту или инжектировать как синтетические алерты в тот же Prometheus).

Я понимаю, что обе хотелки можно набросать на питоне и D-Bus за два часа, но не хочу велосипедить без надобности. Вдруг уже есть какой-нибудь клёвый, модный и молодёжный комбайн, который всё это умеет?

 , , ,

intelfx
()

C++ 17 формально заапрувили

Форум — Development

Поискал поиском, еще не было?

Пруф: https://herbsutter.com/2017/09/06/c17-is-formally-approved/

Из Википедии:

  • Стандартная библиотека языка Си была обновлена и адаптирована с версии C99 до C11;
  • Добавления текстового сообщения по-умолчанию для static_assert;
  • Удаление триграфов;
  • Использование typename в параметрах шаблона, находящегося внутри параметров другого шаблона;
  • Новые правила вывода типа для auto из списка инициализации (std::initializer_list);
  • std::uncaught_exceptions, как замена std::uncaught_exception;
  • Определение вложенных пространств имён: namespace A::B {};
  • Атрибуты для перечислений и пространств имён;
  • Символьные литералы UTF-8;
  • Оценка константности для всех нетипизированных аргументов шаблонов;
  • Упакованные выражения template<typename... As> void foo(As... args) { return (args && ...); } ;
  • Новые методы вставки для std::map и std::unordered_map;
  • Унифицированный доступ к размеру контейнеров std::size();
  • Определение «Смежный итератор»;
  • Удаление некоторых устаревших типов и функций, например, таких как std::auto_ptr, std::random_shuffle или старых функциональных адаптеров;
  • Библиотека файловой системы, основанная на boost::filesystem;
  • Параллельные версии алгоритмов STL;
  • Некоторые математические функции;
  • Большую часть экспериментальной библиотеки TS I.
  • Новый синтаксис для распаковки пар, кортежей и прочих типов, для которых реализован std::get. Например: auto x = std::make_tuple(4,6,7); auto [a,b,c] = x;
  • Инициализация переменной в if и switch. Например: if(auto a = getA(); a.isValid()) {}
  • Автоматический вывод аргументов шаблона класса; также поддерживается ручное указание правил вывода.

 

stevejobs
()

Можно ли статически прилинковать динамическую библиотеку?

Форум — Development

Делаю

gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient mysql.c -o mysql
все компиляется, линкуется нормально. Стоит сделать так
gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib -static -lmysqlclient mysql.c  -o mysql
/tmp/ccFATyET.o: In function `main':
mysql.c:(.text+0x10): undefined reference to `mysql_get_client_info'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
В чем дело? Так вообще законно делать?

 ,

LIKAN
()

makefile - дубли «целей» для повторного использования, как устранить дубли

Форум — Development

добрый день

в makefie для «показа» размера «до» и «после» используется след. конструкция (с дублями целей)

all: begin ... size1 build size ... end
size1:
  <blah-blah-blah>
size:
  <blah-blah-blah>

как можно «извернуться», что-бы «оставить только одну цель» с возможностью «вызывать ее дважды»? надеюсь обьяснил понятно...

спасибо

 

sunjob
()

C++ арифметика указателей: является ли код эквивалентным?

Форум — Development

Первый второму?

#include <iostream>
#include <cstddef>
#include <new>

int main()
{
    alignas(float) std::byte stor[3*sizeof(float)];
    
    for (int i = 0; i < 3; ++i)
        new (stor + i*sizeof(float)) float(i);
    
    for (int i = 0; i < 3; ++i)
        std::cout << *std::launder( reinterpret_cast<float*>(stor + i*sizeof(float)) ) << std::endl;
}
#include <iostream>
#include <cstddef>

int main()
{
    alignas(float) std::byte stor[3*sizeof(float)];
    
    for (int i = 0; i < 3; ++i)
        new (stor + i*sizeof(float)) float(i);
    
    for (int i = 0; i < 3; ++i)
        std::cout << ((float*)stor)[i] << std::endl;
}

 , ,

sostupid
()

sendfile из файла в файл не работает?

Форум — Development

sendfile в принципе не работает на ядрах 2.6.x?
Судя по man sendfile всё должно работать, а у меня стабильно
возвращает EINVAL. Ядро 2.6.18.

Единственное, что нашёл по этому поводу:
http://ilia.ws/archives/13-sendfile-syscall-and-why-the-2.6-linux-kernel-sucks!.
html

Благо, теперь появился новый способ быстрого копирования - с помощью
splice(), с ним всё нормально работает.

Тестовая программа:

#include <stdio.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <unistd.h>
#include <fcntl.h>

int main (int argc, char **argv)
{
    int     fd_in,
	    fd_out;
    off_t   offset;
    ssize_t last_sent;

    if (argc < 3) {
	fprintf (stderr, "2 arguments required\n");
	return -1;
    }

    fd_in = open (argv [1], O_RDONLY);
    if (fd_in == -1) {
	perror ("open #1");
	return -1;
    }

    fd_out = open (argv [2], O_WRONLY | O_CREAT);
    if (fd_out == -1) {
	perror ("open #2");
	return -1;
    }

    offset = 0;
    for (;;) {
	last_sent = sendfile (fd_out, fd_in, &offset, 1 << 20);
	if (last_sent < 0) {
	    perror ("sendfile");
	    return -1;
	}

	if (last_sent == 0)
	    break;
    }

    fprintf (stderr, "OK\n");

    return 0;
}
erDiZz
()

Где живут аллоцируемые куски памяти и файловые хэндлеры?

Форум — Development

Здравствуйте, системные програмисты

Подскажите, вот вызов malloc(size) возвращает указатель на выделенный кусок. При этом free не требует указывать размер.

Так-же open и socket возвращают лишь число

Возникает очевидное подозрение, что есть некие глобальные словари (массивы, списки), в которых ключ - это адрес (для malloc) или число (в случае open), а значение - структура, с настройками этих сущностей.

Почему сделанно именно так? Почему возвращается примитивное значение, а не, как это принято в Си, opaque структура, содержащая состояние?

Имеет ли право на жизнь подобный подход? Существует ли пример несистемных библиотек, которые возвращают число/указатель вместо структуры?

 , ,

makoven
()

gentoo переход на 17.1 профиль

Форум — General

Добрый день.
Помогите разобраться. В наличии:
sys-apps/baselayout-2.2
sys-apps/openrc-0.30
sys-devel/gcc-6.4.0

Сейчас профиль
eselect profile list
[12] default/linux/amd64/17.0 *

unsymlink-lib выдает следующее:
/usr/lib is a real directory! was the migration done already?

ls -la /usr{/,/local/}

/usr/:
total 252K
drwxr-xr-x  14 root root 4.0K Jan 19  2015 ./
drwxr-xr-x  23 root root 4.0K Jan 16 13:48 ../
drwxr-xr-x   3 root root  60K Feb 12 13:22 bin/
drwxr-xr-x 206 root root  20K Feb 11 19:21 include/
drwxr-xr-x  12 root root 4.0K Oct 28 23:47 lib/
drwxr-xr-x   9 root root  52K Jan 29 01:58 lib32/
drwxr-xr-x  77 root root  68K Feb 11 19:21 lib64/
drwxr-xr-x  11 root root 4.0K Feb  9 18:29 libexec/
drwxr-xr-x   7 root root 4.0K Feb 12 13:26 local/
drwxrwxr-x 172 root root 4.0K Feb  9 17:00 portage/
drwxr-xr-x   2 root root 4.0K Feb 12 13:20 sbin/
drwxr-xr-x 141 root root 4.0K Feb 11 19:21 share/
drwxr-xr-x   5 root root 4.0K Oct 19 10:42 src/
drwxr-xr-x   6 root root 4.0K Jun 20  2013 x86_64-pc-linux-gnu/
lrwxrwxrwx   1 root root    8 Jun 20  2013 tmp -> /var/tmp/

/usr/local/:
total 28K
drwxr-xr-x  7 root root 4.0K Feb 12 13:26 ./
drwxr-xr-x 14 root root 4.0K Jan 19  2015 ../
drwxr-xr-x  2 root root 4.0K Jan 26 22:18 bin/
drwxr-xr-x  2 root root 4.0K Jan 10  2015 lib32/
drwxr-xr-x  2 root root 4.0K Sep 13  2016 lib64/
drwxr-xr-x  2 root root 4.0K Jun 20  2013 sbin/
drwxr-xr-x  4 root root 4.0K Aug 31  2016 share/



Если я сейчас сделаю eseelect profile и добавлю в make.conf
SYMLINK_LIB=no LIBDIR_x86=lib, не получится кактус вместо системы? Как вообще правильно будет раскрутиться? baselayout обновлялся в 2013 году.

 

arrecck
()

Правильная сборка .deb пакета

Форум — General

Добрый день. Я задался таким вопросом - как правильно собрать для Debian Jessie .deb пакет с некоторой прогой?

В случае, если проги в репозиториях debian принципиально нет, как я понимаю, есть два варианта развития событий: либо я подготавливаю полноценную «дебианизацию» в соответствии с инструкцией по созданию пакетов Debian, либо использую checkinstall. Вопрос: Если речь идёт только о личном использовании, то есть ли смысл идти длинным путём (дебианизация), или checkinstall является оптимальным решением? Как я понимаю, checkinstall позволит создать .deb пакет из уже собранной программы и заполнить всю ту информацию в пакете, которая должна там быть, в то время как для полноценной дебианизации придётся писать много разного в том числе и для сборки, а значительная часть информации не попадёт в .deb пакет, т.е. окажется для меня ненужной.

Если пакет есть в репозиториях debian, но мне нужна более новая версия, то имеет ли смысл брать готовый каталог debian и адаптировать под новую версию, или лучше самому (возможно) наложить патчи из debian, а потом собрать и заcheckinstall'ить? Заранее спасибо.

 , , , ,

Norong
()

compile-time проверка наличия одинаковых enum'ов

Форум — Development

Приветствую, есть enum вот такого вида:

enum ids {
   ID1 = 1,
   ID2 = 2,
   ID3 = 3,
};

Нужно добавить проверку этапа компиляции на предмет наличия одинаковых enum-ов, например:

enum ids {
   ID1 = 1,
   ID2 = 2,
   ID3 = 3,
   ...
   ID100 = 2
};

Можно ли это сделать макросом? Спасибо.

 , ,

cruz7
()

вопрос по BPF

Форум — Development

Привветствую,

Вот есть два типа BPF - classic BPF (cBPF) и extended BPF (eBPF). Как я понимаю, второй 64-битный, а cBPF - 32-битный. То есть получается что cBPF код внутри ядра будет транслироваться в 64-битный перед выполнением? И еще - eBPF всегда требует встроенной в ядро виртуальной машины (echo 1 > /proc/sys/net/core/bpf_jit_enable)? Как eBPF будет выполняться без включенной VM ?

 ,

cruz7
()

Покажите свой make.conf

Форум — Desktop

$SUBJ. Нужно для использования в качестве примера.

 ,

Valkeru
()

[cmake] поиск дополнительных библиотек

Форум — Development

cmake может к примеру находить библиотеки gtk, а как с помошью его находить другие для которых не написан модуль, например libgconf? Интересует поиск пути к заголовкам и библиотекам. Или для этого принято вызывать pkg-config? А что если библиотеки нет даже в базе pkg-config?

 

Lucky1
()

В каком виде гонять данные между клиентом и сервером

Форум — Development

Привет, эксперты. Нужно придумать какой-нибудь протокол обмена между клиентом и сервером по сетке (транспорт TCP).

Данные гоняются всякие разные:

  • Авторизация клиента на сервере по логину-паролю
  • Получение клиентом настроек некоей «системы» с сервера
  • Отправка команд клиентом на сервер (сделай то-то, поменяй настройки такого-то компонента «системы»)
  • Получение клиентом различных списков с сервера (события, ошибки, отчеты)
  • Получение клиентом данных о состоянии компонентов системы (числа, графики)
  • Получение клиентом документов с сервера (текст отчетов)

Может что-то еще, о чем я забыл упомянуть.

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

Соответственно, может есть какие-нибудь банальные инструменты и популярные подходы, которыми решаются подобные задачи? Пока смотрю в сторону отправки данных в формате json или xml, слать в виде: пара байт на длину сообщения_тело сообщения (json или xml). Возможно, в будущем этот трафик надо будет шифровать.

 ,

s3rjke
()

Вопрос по командам set, env, declare, export

Форум — Admin

Не могу понять, чем объясняется разница в выводе команд set, env, export и declare (typeset). Вроде все они должны выводить перечень переменных среды (и функций), но вывод этих команд существенно отличается. Может кто-нибудь толково объяснить, в чем их разница. В man-ах копался, но не понял.

>>>

vikos
()

Помощь в освоении

Форум — General

Приветствую!

Начал изучать linux, в частности - gentoo. После прочтения Handbook возникла небольшая каша в голове:

1. Там сказано, что необходимо создавать 2 раздела для загрзуки, 1 - граб, 2 - под boot. Для чего создаётся раздел 1(пусть будет /dev/sda1), ведь он никуда не монтируется? Ведь grub ставится на /boot(/dev/sda2). Не пойму этот момент. 2. Не смог разобраться как поставить EFI+Grub. Положил ядро в /boot/efi/boot, сделал grub-install --target=x86_64-efi, ядро она нашёл где ему и полагается в корне /boot, но по efibootmgr -v вижу, что он пытается загрузить \efi\boot\bootx64.efi. Объясните, пожалуйста, процесс загрузки, как UEFI доложен подгрузить grub для выбора ядра? 3. Собрал ядро дважды(руками и через genkernel), через efibootmgr без загрузчика указал откуда грузиться, загрузка пошла. В случае с ручной сборкой выдал ошибку radeon vga efi и завис, в случае с ядром через genkernel - unable to mount root fs on unknown block(0,0) и так же завис. Я не смог разобраться, как организовать логгирование загрузки, логов не нашёл, цитирую только то, что увидел на экране загрузки. Что делать с этими ошибками?

/cat/etc/fstab: /dev/sda2 /boot ext4 defaults,noatime 0 2 /dev/sda3 none swap sw 0 0 /dev/sda4 / ext4 noatime

P.S. boot поменял на ext4, попробовал grub поставить, но не дал, не нашёл EFI. Помогите, пожалуйста!

 

Vodonos
()

Gentoo и красноглазие

Форум — Talks

Откуда пошёл сей стереотип? Гента требует долгих операций с постоянным вмешательством оператора, которые нельзя разбить на несколько дней и посему надо залипать до глубокой ночи? Вроде же наоборот — запустил конопляцию и пошёл спать или прочими делами заниматься. Может, его распространили жопоголики, которые контролируют весь процесс, потому что «а вот вдруг сейчас ошибка выскочит, а я не замечу, сколько времени потеряю» или «вдруг скрипты кривые, rm -rf / начнётся, а я не успею его остановить»? Или школота, которая боится, что бабушка выдернет комп из розетки, чтобы электричество не жрал, пока за ним никто не сидит?

Дисклеймер: я не гентушник.

 , ,

bodqhrohro_promo
()

Как понять на чем тормозит nginx?

Форум — Admin

Ситуация такая. Докер, из него торчит порт, нжиникс заворачивает запросы на этот порт. Так вот прямой запрос в докер работает на 400 мс быстрее чем запрос через нжиникс.

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

Как понять что является причиной тормозов?

Апдейт. Тормозит ссл, поглядел число пакетов на хендшейке и длину пинга, помножил одно на другое - как раз время задержки.

 , ,

ya-betmen
()