LINUX.ORG.RU

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

многократный вызов ssh в цикле bash

Форум — General

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

 ,

naKovoNapalBaran
()

Возможно через bash записать каждую строку из текстового файла в отдельные файлы в зависимости от первого символа строки?

Форум — General

Возможно через bash записать каждую строку из текстового файла в отдельные файлы в зависимости от первого символа строки?

Если строка начинается с ‘a’ - то в файл a_out.txt, если с ‘b’ - в файл b_out.txt и.т.д. Если с цифры - в отдельный файл dig_out.txt, в остальных случаях - в symb_out.txt

В исходном файле имеем:
anton
boris
andre
1igor
_vasilii

После выполнения скрипта:
В файле a_out.txt
anton
andre

В файле b_out.txt
boris

В dig_out.txt
1igor

В symb.out
_vasilii

Если возможно, пожалуйста, подскажите как реализовать это.

 

AlCat
()

Проксирование сокетов?

Форум — Development

Стоит такая задача: есть 2 сокета и мне нужно их «соеденить»

т.е. если данные пришли с первого сокете - отправить их во второй, и наоборот.

Сейчас это сделано просто - читаем из сокета 1, пишем в сокет 2 (И так далее)

вопрос - можно ли это сделать не гоняя данные через userspace, т.е. средствами ядра/OS?

thx

 , ,

Effect
()

Новая книга «Linux Kernel Programming»

Новости — Ядро Linux
Группа Ядро Linux

Много воды утекло с момента выхода LDD3 (LDD4 мы, видимо, уже не дождёмся), безнадёжно устарел фундаментальный труд Бовета и Чезати, Роберт Лав давно не радовал нас своими прекрасными творениями. Казалось бы, в мире литературы о программировании ядра Linux наметилась устойчивая стагнация…

Но нет! Ситуацию спасает замечательный индийский программист со звучным именем Кайван Биллимория. Он написал книгу о программировании ядра, аж в двух томах.

Об авторе

Кайван программирует с 1983 года. В то время он самостоятельно научился программировать на бейсике, затем освоил Си и ассемблер под MS-DOS, а потом открыл для себя мир UNIX и Linux. Занимался программированием ядра и драйверов, участвовал в коммерческих и свободных проектах, занимался преподавательской деятельностью.

Повествование в книге ведётся на основе Ubuntu 18.04 LTS и ядра версии 5.4.

( читать дальше... )

>>> Том 1 на Amazon

>>> Том 2 на Amazon

 , , ,

x-signal
()

Chromium и сборка в tmpfs

Форум — Development

Сколько потребляет сборка современного хромиума в пике сборочного процесса? В документации на голубом глазу пишут, что вот можете 20Гб tmpfs создать, и ОК.

Пробовал собрать с дефолтным конфигом (с NaCl и проч.) Так ведь и 25Гб не хватило! ‘no space left on device’

 autoninja, ,

seiken
()

Чем пользуетесь из F-Droid?

Форум — Mobile

Собственно сабж. Третий андрофон. В первый раз ставил из него судоку. Во второй: блокнот. В этот раз: «Транзистор» для прослушивания радио.

А кто чем ещё пользуется?

 ,

AlexVR
()

Поиск файла того же имени

Форум — Development

С помощью Path(file).rglob(…) найден файл, надо найти с тем же именем, но немного другим суффиксом. Признаться довольно долго искал решение и всё же получилось такое:

import os

def find_ifo (path):
    name = os.path.splitext(path)[0]
    g = path.parent.glob('*.[iI][fF][oO]')
    return next(x for x in g if os.path.splitext(x)[0] == name)

ИМХО какое-то уродство получилось. Может среди обширного набора инструментов есть что-то попроще?

 , ,

ados
()

Быстрый Set на C

Форум — Development

Мне нужна структура данных похожая на Set. Она должна обладать следующими свойствами:

- В ней хранятся числа от 0 до 4095.

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

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

Эта структура должна работать быстро, потому что будет много-много раз в секунду цикл заполнение-итерирование-очистка, то есть вставка за O(1), итерирование по всем элементам за O(N), очистка желательно за O(1).

На первый взгляд приходят в голову битовые карты (ведь множество значений элементов небольшое), однако они, как мне кажется, не проходят по условию «быстрое итерирование и очистка». Есть ли какие-то ещё варианты? Подойдёт как алгоритм, так и готовая plain C библиотека. Или на таком количестве элементов все альтернативы будут иметь такую же производительность?

 ,

KivApple
()

Вечерний тред хорошей музыки

Форум — Talks

Раз Два Три

Всем хорошего вечера )

 ,

LongLiveUbuntu
()

что не так в команде?

Форум — Admin

adb exec-in 'cd /data/user/0/; tar -xpvf - "user/0/*" .' < xz -dс -T4 data.tar.xz

bash: xz: Нет такого файла или каталога

 , , , ,

doc0
()

Bash: создание списка переменных в зависимости от к-ва ядер ЦП

Форум — Development

Здравствуйте, ув. программисты и сисадмины. Решение моего вопроса не нашёл абсолютно нигде. Задача: перед выполнением списка команд небходимо предопределить список переменных, в количестве равному к-ву ядер процессора. Цикл здесь не катит, так как нужно запустить одновременно несколько экземпляров процесса с уже готовыми переменными, к-во которых заранее неизвестно и определяется во время выполнения скрипта: VAR=$(nproc) Уверен, что это очень простая задача для программистов, но как её выполнить нигде не написано. Помогите пожалуйста решить такую одновременно простую и сложную задачу.

 ,

Wehrmacht_Rover
()

ц-синтаксис

Форум — Talks

Встретил тут на cdecl.org в примерах следующую конструкицю:

(double (^)(int , long long ))foo
Что расшифровывается

cast foo into block(int, long long) returning double.

Что в данном случае понимается под «блоком»?

 ,

thunar
()

Fifo реализация на Си с минимальными затратами по времени

Форум — Development

В общем вопрос: нужна очередь fifo, такая, чтобы при заполненной очереди, допустим массив из 5 элементов или список из 5 узлов, при поступления нового, шестого элемента, элемент front удалялся, а новый шестой элемент вставлялся в rear и становился пятым. Я знаю как это сделать списком, с указателями на следующий элемент в каждой ноде и указателями front и rear, но мне не хочется вызывать malloc и free при каждой операции, я знаю как это реализовать с помощью массива, но мне не хочется всякий раз сдвигать весь массив на один элемент, собственно вопрос, нет ли какого-нибудь третьего пути, который позволил бы не тратится на malloc и free или (в случае с массивом) не перемещать память в массиве?

 , , , ,

IvanR
()

Ограничение по-умолчанию потребления ОЗУ браузером (аналог systemd-run -p MemoryHigh=bytes -p MemoryMax=bytes)

Форум — General

Я хочу сделать по-умолчанию ограничение потребления памяти приложением (а именно браузером). Желательно с возможностью легко временно изменять ограничения, например, если я хочу однократно увеличить лимит доступной памяти браузеру до 4 Гб только для одной сессии.

Сейчас я пользуюсь systemd-run:

systemd-run --user --no-block -p MemoryHigh=2G -p MemoryMax=3G firefox -P default

Выдержка из man:

MemoryHigh=bytes

Specify the high limit on memory usage of the executed processes in this unit. Memory usage may go above the limit if unavoidable, but the processes are heavily slowed down and memory is taken away aggressively in such cases. This is the main mechanism to control memory usage of a unit.

MemoryMax=bytes

Specify the absolute limit on memory usage of the executed processes in this unit. If memory usage cannot be contained under the limit, out-of-memory killer is invoked inside the unit. It is recommended to use MemoryHigh= as the main control mechanism and use MemoryMax= as the last line of defense.

Хочется сделать так, чтобы эти ограничения применялись к любому запущенному firefox, не важно, из консоли, через GUI или через xdg-open. И чтобы ограничения были и для самого приложения, и для всех его порождённых тредов и процессов.

В systemd-run это сделано с помощью unified control group hierarchy.

 , ,

Pravorskyi
()

Порекомендуйте видео, обучающие английскому

Форум — Talks

понравилось такое: Learn English 24/7 with EnglishClass101 TV https://www.youtube.com/watch?v=gt8TEmihgFw

1. Приятнй голос

2. Идеальное произношение (носитель языка)

3. Подходит моему уровню понимания

4. Без лишней рекламы и организационных слов

Ищутся видео о грамматике, аудирования, а также интенсивное изучение слов

 ,

znavko
()

Реализация методов в Си

Форум — Development

Всем привет!
Учу язык Си (не С++), дошёл до структур, и они мне так напомнили уже привычное ООП, с методами.
Решил, что можно ведь реализовать «Классы» и «Методы» и в обычном Си, объявляя указатели на функции в структурах.
Да, колхозно, да можно выбрать С++, а не Си. Но просто хотелось узнать мнение бывалых Си'шников, насколько это адекватный подход (1), и вообще делают ли так (2), и как можно улучшить написанный мной пример ниже (3)?:

#include <stdio.h>

int xsum(int x, int y);

int xsum(int x, int y)
{
        return x + y;
}

int main()
{

        struct point
        {
                int x;
                int y;
                int (*xysum)(int x, int y);
        };

        struct point pt;

        pt.x = 320;
        pt.y = 200;
        pt.xysum = &xsum;


        printf("X: %d\nY: %d\nSum: %d\n", pt.x, pt.y, pt.xysum(pt.x, pt.y));

        return 0;
}

Выводит:
X: 320
Y: 200
Sum: 520

 , ,

winston3d
()

Универсальный(?) формат хранения данных

Форум — Development

Будет много текста.

Я даже не знаю, скорее всего я спрашиваю — «где мне взять такое готовое?», но, дело в том, что кратко я это описать не смогу, т.к. не знаю как это называется.

Итак, что же мне нужно.

Я хочу раз и навсегда выбрать и использовать универсальный формат хранения данных. Что я под этим подразумеваю?

Берем некую абстрактную программу, которая манипулирует какими-либо данными. И эти данные сохраняются. Пусть будут живые примеры: Ardour сохраняет свои проекты в XML, фотошоп в своем бинарном, ёксель в zip+XML, ну и т.д...

Как правило (в приведенных примерах и далее в моем случае) сами данные представляют собой «дерево» где какие-то зависимые элементы лежат внутри родительских. Некоторые (ёксель) комбинируют несколько уровней для создания дерева данных: zip->fs->xml.

А зачем это все? Я же просто хочу сохранять состояние, файл проекта, логи или что-то еще.. Т.е, конечно понятно, возможно где-то удобен xml, где-то JSON, где-то ini, а где-то бинарь. Но проблема в том, что у всех все по разному. И для преобразования в удобоваримый вид внутри приложения (структуры, массивы, указатели, ссылки, значения), (кроме бинарного хранения) необходим парсер и интерпретатор/транслятор этих данных, причем в обе стороны (fs->?*->app и app->?*->fs). Форматов много, и для каждого куча либ, писанных за авторстом от васяна до профессора.

Нет, я пишу сюда потому, что не хочу чтобы случилось так: http://twentysix.ru/uploads/images/00/91/06/2016/05/10/adaaed_full.png

Выше я описал все расплывчато. А теперь будет более похоже на спеку. Конечно я могу упустить сейчас некоторые детали. Но это от того, что я не продумывал все глубоко. И все еще уверен, что я далеко не первый, и эта шляпа уже сделана и имеет название.

Итак, поехали.

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

2) Дерево данных. Каждый узел — это бинарный пакет с заголовком, хешсуммой и указанием размера узла, включая размеры потомков, или смещения откуда начинаются потомки со своими заголовками. Да, декларативное бинарное описание структур данных любого моего/вашего приложения.

3) Единый парсер-транслятор туда/сюда. Он знает только то, как ему распарсить свои декларации, отсеить их, а на выходе будут уже готовые к работе данные в памяти. Таким образом вы можете seek'ать в файле или ожидать желаемую позицию смещения в буфере, чтобы пропустить не интересующие вас в данный момент данные (в XML, да и в любых text-based, с этим облом, он последовательный, текстовый, посимвольный, пока не пропарсишь минимум узел, а он может быть огромным, с вложениями, ты не узнаешь структуру). Так же для парсера должна быть определена схема (отсылка к XSD schema) внутри приложения, можете называть это конфигом парсера для заточки именно под ваши данные. Именно сюда могут быть и «забиндены коллбеки валидатора». При сохранении же должно быть обратное действие.

Теперь снова простыми словами.

Я хочу что-то типа бинарного XML, ака узлы-пакеты, где сразу лежат бинарные данные. И универсально транслировать это все в сишное приложение.

Так вот. Есть ли такое готовое? Если есть — подскажите. Если нет — отпишитесь что вы обо всем этом думаете? Какие слабые и сильные стороны этой эпопеи?

<joke-mode>Хм... Да, очень похоже на кусок OSI. Но почему данные не хранят в виде TCP пакетов?</joke-mode>

Сабж.

 , , ,

deep-purple
()

Посоветуйте наушники

Форум — Talks

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

Но можно условно поделить на две такие категории:
А) (альдебаран): самые лучшие уши
Б) (бета аттики): самые разумные для ежедневного использования

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

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

 

stevejobs
()

Свежая информация о состоянии FTP'шников

Форум — Talks

Вот здесь лог проверки состояния анонимных FTP'шников из списка более чем 26-ти тысяч: http://saahriktu.org/anonftptest20160905-10.lzma . В случае успешного соединения в лог сохранялся также листинг корневой директории. А вот здесь лог аналогичной проверки списка более чем 150 неанонимных FTP'шников: http://saahriktu.org/notanonftptest20160910.lzma .

 

saahriktu
()

Функция popen() - язык СИ

Форум — Development

Здравствуйте.

Есть некая программа, неважно что она делает (в крестики-нолики сама с собой играет). В ней есть отдельный поток, задача которого, запускать скрипт «pinre.sh» и считывать результат работы этого скрипта:

#!/bin/sh

BCM0=`cat /home/dima/test.txt`
BCM1=`cat /home/dima/test2.txt`
BCM2=`cat /home/dima/test3.txt`

S2="$BCM0 $BCM1 $BCM2"
echo "$S2"

exit 0

Скрипт опрашивает три файла (test*.txt), собирает результат в строку и делает echo «$S2», тоесть выплёвывает строку «bla1 bla2 bla3».

Вот поток, который запускает скрипт и ловит ответ:

...
void * thr_fnc() 
 { 
   for(;;) 
    { 
      sleep(1);

      FILE * read_pins;
      char in_data[16];

      read_pins = popen("pinre.sh", "r");

      int lastchar = fread(in_data, 1, 15, read_pins);
      in_data[lastchar] = '\0';
      printf("Data:%s", in_data);
      pclose(read_pins);
    } 

   return 0;

 } 
...

Вопрос заключается вот в чём: что из себя в данном случае представляет FILE * read_pins;, это какой-то файл, который создаётся на диске или область в памяти выделяется? Или это ещё что-то?

Перемещено leave из general

 

stD
()