LINUX.ORG.RU

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

Шок от С. Как склеивать строки?

Форум — Development

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow. Предлагают 2 варианта:

Первый - создать char buf[молись_чтобы_хватило] и делать str(n)cat/sprintf в этот buf.

Второй - использовать asprintf, который расширение, нестандарт и вообще.

Вопрос: как вы склеиваете строки? Может есть какая-нибудь общепринятая либа?

Простите за нубский вопрос

 

makoven
()

А поделитесь-ка своим PS1

Форум — Talks

Собственно сабж. Вот скрипт для получения моего:

case "${TERM}" in
xterm*|rxvt*)
    clr_mode=9
    ;;
*)
    clr_mode=3
    ;;
esac

if [ ${UID} -eq 0 ] ; then
  usr_color="\e[0;31m"
  usr_sign="#"
else
  usr_color="\e[0;${clr_mode}2m"
  usr_sign="\$"
fi

# source /usr/share/bash-completion/bash_completion
# или 
# source /etc/bash_completion

# enable showing the dirty (unstaged/staged) state
export GIT_PS1_SHOWDIRTYSTATE=1
# enable showing the stashed state
export GIT_PS1_SHOWSTASHSTATE=1
# enable showing the untracked state
export GIT_PS1_SHOWUNTRACKEDFILES=1
# enable showing the upstream state
export GIT_PS1_SHOWUPSTREAM="auto verbose"

type __git_ps1 &>/dev/null && git_prompt='$(__git_ps1 " %s")'

if [ -n "$SSH_CLIENT" ]; then
    host_prompt="\e[1;33m@$(echo $SSH_CONNECTION | awk '{print $3":"$4}')\e[m"
fi

PS1="\[${usr_color}\]\u\[\e[m\]$host_prompt \[\e[1;34m\]\w\[\e[m\]\[\e[1;35m\]${git_prompt}\[\e[m\] \[${usr_color}\]${usr_sign}\[\e[m\] "

unset color_prompt force_color_prompt git_prompt usr_color usr_sign host_prompt

В итоге выходит нечто такое:

\[\e[0;92m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\]\[\e[1;35m\]$(__git_ps1 " %s")\[\e[m\] \[\e[0;92m\]$\[\e[m\]

Выглядит так

 , ,

KennyMinigun
()

Линковка при сборке, линковка при запуске. Всё сложно.

Форум — Development

Есть библиотека, которая может собираться в двух исполнениях, статической или динамической. Назову её условно libseveral. libseveral.so установлена в операционной системе. Есть разделяемые библиотеки (.so), установленные в операционной системе, они ссылаются прямо или косвенно на libseveral.so в динамическом исполнении и тянут её в память за собой, назову их - libanother1.so, libanother2.so и libanother3.so. Есть мой проект разделяемой биллиотеки (назову libroot.so), которая: а) линкует libseveral.a в статическом исполнении, б) линкует системные libanother1.so, libanother2.so и libanother3.so. В результате, libseveral.a в бинарник не попадает, а тот оказывается слинкован с libseveral.so через остальные библиотеки. Я приблизительно понимаю почему, но не уверен.

libseveral.a
libseveral.so

libanother1 -> libseveral.so
libanother2 -> libanother3.so
libanother3 -> libseveral.so

libroot.so -> libseveral.a
libroot.so -> libanother1.so
libroot.so -> libanother2.so

Вопрос. Существует ли способ сделать так, что бы к libroot.so было прилинковано всё содержимое libseveral.a, а остальные библиотеки, libanother… которые линкуются в рантайме не загружали за собой libseveral.so, а вызывали вместо этого libseveral.a, слинкованный в libroot.so? Менять библиотеки, лежащие в операционной системе нельзя, так же как и устанавливать в систему ничего, кроме libroot.so - требование. Мне необходимо, что бы всё прилинкованное к libroot.so вызывало исключительно libseveral.a, т.к. libseveral.a это мой форк. Как-то так.

 , ,

normann
()

Перепаял чип Amlogic S912 на сгоревшем самодельном ноутбуке

Галерея — Рабочие места

Кто помнит предыдущую серию про самодельный ноутбук я сжёг его, включив в него адаптер USB=>UART TTL, а в него видеорегистратор. Не знаю, что пошло не так, но перестал работать USB, сначала отказал хаб, система поначалу загружалась, потом перестала. Бутлоадер работал, в нём USB порты тоже все работали. Но что делать? Заказал новый чип на али, 700р он стоит. Получил, перепаял. Не с первого раза, пришлось несколько раз нагревать снова и шевелить, в итоге всё работает, пост пишу с него. Работает всё, и WiFi, и все USB и SD карточка. Данные на eMMC не пострадали. Приложу фото с бардаком на столе. Нижний подогрев из жёсткой фольги из поддончиков для выпечки, лампа галогенка, регулирование диммером.

Тема с ноутбуком будет продолжаться!

>>> Просмотр (1920x1024, 4413 Kb)

 ,

burato
()

Вопросы по -march=

Форум — General

1) Если я задам -march=amdfam10, будет работать на вообще ВСЕХ процах AMD последующих поколений, или не на ВСЕХ (3DNow! и т.д.)?
Или всё же лучше -march=x86-64 -m64 -Wa,--64,-march=generic64,-mamd64 ?
Как если надо чтобы работало на всех AMD (не интел) процах начиная где-то с 2010-ых?

2) Почему если задать -Wa,-march=generic64, или -Wa,-march=amdfam10 в CFLAGS,
glibc выдаёт ошибку при сборке?:

gcc ../sysdeps/x86/libc-start.c -c -std=gnu11 -fgnu89-inline  -Wa,-march=generic64 -O2 -Wall -Wall -Wwrite-strings -Wundef -fmerge-all-constants -frounding-math -fno-stack-protector -Wstrict-prototypes -Wold-style-definition -fmath-errno   -fPIC -fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0 -funwind-tables  -ftls-model=initial-exec      -I../include -I/w/w/src/build/csu  -I/w/w/src/build  -I../sysdeps/unix/sysv/linux/x86_64/64  -I../sysdeps/unix/sysv/linux/x86_64  -I../sysdeps/unix/sysv/linux/x86/include -I../sysdeps/unix/sysv/linux/x86  -I../sysdeps/x86/nptl  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/x86_64/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/x86_64  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/x86_64/64  -I../sysdeps/x86_64/fpu/multiarch  -I../sysdeps/x86_64/fpu  -I../sysdeps/x86/fpu  -I../sysdeps/x86_64/multiarch  -I../sysdeps/x86_64  -I../sysdeps/x86  -I../sysdeps/ieee754/float128  -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96  -I../sysdeps/ieee754/dbl-64/wordsize-64  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include -isystem /w/w/pkg/usr/include -D_LIBC_REENTRANT -include /w/w/src/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h  -DPIC -DSHARED     -DTOP_NAMESPACE=glibc -o /w/w/src/build/csu/libc-start.os -MD -MP -MF /w/w/src/build/csu/libc-start.os.dt -MT /w/w/src/build/csu/libc-start.os
gcc ../sysdeps/unix/sysv/linux/x86_64/sysdep.S -c     -I../include -I/w/w/src/build/csu  -I/w/w/src/build  -I../sysdeps/unix/sysv/linux/x86_64/64  -I../sysdeps/unix/sysv/linux/x86_64  -I../sysdeps/unix/sysv/linux/x86/include -I../sysdeps/unix/sysv/linux/x86  -I../sysdeps/x86/nptl  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/x86_64/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/x86_64  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/x86_64/64  -I../sysdeps/x86_64/fpu/multiarch  -I../sysdeps/x86_64/fpu  -I../sysdeps/x86/fpu  -I../sysdeps/x86_64/multiarch  -I../sysdeps/x86_64  -I../sysdeps/x86  -I../sysdeps/ieee754/float128  -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96  -I../sysdeps/ieee754/dbl-64/wordsize-64  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include -isystem /w/w/pkg/usr/include -D_LIBC_REENTRANT -include /w/w/src/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h  -DPIC -DSHARED     -DTOP_NAMESPACE=glibc -DASSEMBLER -I/w/w/src/build/csu/. -Werror=undef -Wa,--noexecstack   -o /w/w/src/build/csu/sysdep.os -MD -MP -MF /w/w/src/build/csu/sysdep.os.dt -MT /w/w/src/build/csu/sysdep.os
../sysdeps/x86/cpu-features.c: Assembler messages:
../sysdeps/x86/cpu-features.c:154: Error: `xgetbv' is not supported on `generic64'
make[2]: *** [/w/w/src/build/sysd-rules:891: /w/w/src/build/csu/libc-start.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/w/w/src/glibc-2.32/csu'
make[1]: *** [Makefile:470: csu/subdir_lib] Error 2
make[1]: Leaving directory '/w/w/src/glibc-2.32'
make: *** [Makefile:9: all] Error 2

'xgetbv' is not supported on 'generic64'.
Это он как-то неправильно набор инструкций определил?
Если без -Wa,-march=generic64 — ошибки нет. Т.е. если даже задан -march=x86-64 (gcc), есть ошибка, пока не уберёшь -Wa,-march=

Или неправильно ассемблеру -march= задавать, а надо тока компилятору?

 , ,

teod0r
()

Как лучше сделать сжатый swap?

Форум — Admin

Привет. На моем ноуте периодически не хватает памяти под рабочие задачки. Поэтому использую zswap, он хорошо справляется, но имеет недостаток. Когда нужно вытеснить страницу памяти из сжатого кэша в памяти, он ее разжимает и потом сохраняет с своп (насколько я выяснил дойдя аж до исходников https://github.com/torvalds/linux/blob/master/mm/zswap.c /* decompress */…но подробно не разбрался), что повышает дисковый IO. Мне хотелось бы что бы этого разжимания не было. Отсюда два вопроса.

  1. Есть ли аналог zswap, который умеет скидывать в своп сжатые страницы? zram в этом смысле вообще просто раздел в памяти сжатого свопа вроде бы просто заполнится и дальше будет работать своп на ссд следующий по приоритету без сжатия?
  2. Как можно сделать сжатый файл подкачки на уровне фс, что бы страницы zswap разжимал, а фс опять на лету сжимала? Это костыль конечно, но хоть так можно уменьшить износ ссд при использовании подкачки.

 , ,

i3draven
()

zram с sysvinit

Статьи — Desktop

Если вам необходимо использовать zram с ядром не меньше, чем 5.19 и системой инициализации sysvinit...

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

 ,

vbcnthfkmnth123
()

Замена tmpfs на zram. Есть ли профит?

Форум — General

Вопрос чисто из праздного интереса.

Стоит на виртуалке Arch с 4ГБ RAM. От нефиг делать обновлял ядро не готовым бинарным пакетом, а со сборкой из сорсов. Перед этим вместо tmpfs для /tmp сделал zram-диск на 4 гига. Вся сборка влезла в 2,5 гига на диске, а сам диск в сжатом видел занял где-то 900МБ в памяти.

Имеет ли право на жизнь такой способ оптимизации, или нефиг фигней страдать?

 , ,

Radjah
()

Хочу поредактировать видео h264. Насколько возможно, чем, как?

Форум — Development

Хочу редактировать h264, может быть в перспективе h265. Поредактировать вектора движения между кадрами, макроблоки, низкочастотные коэфициенты, влияющие на цвет/яркость картинки. Если картинку можно будет отскейлить или сместить - вообще замечательно, если просто отломать (заблюрить) отдельный макроблок - тоже хорошо.

По аналогии с редактированием jpeg, который вполне себе можно редактировать по границам MCU (8х8 кубики), можно отдельно править AC/DC коэфициенты и для которого есть даже готовые редакторы или конверторы jpeg -> txt -> jpeg.

Речь здесь идет именно о редактировании h264/h265, а не полном пережатии (распаковка - редактирование - сжатие), так что ffmpeg или Adobe Premiere идут сразу лесом.

Возможно кто-то знает и подскажет тулзы, которые были бы очень полезны в процессе изучения/редактирования потока, навроде https://www.elecard.com/products/video-analysis/streameye, показывающие битстрим, чтобы было сразу видно, где и какие данные, как их достать и как править. Они же будут полезны, когда я буду тестировать уже «отредактированный» поток.

Где-то на Stackoverflow был тред, где РУЧКАМИ сделали валидный битстрим h264, картинка вроде 32х32 пикселя, причем автор уложился где-то в 50-100 байт. Увы, с ходу найти не смог. Вот мне нужны инструменты или учебник по такой магии.

 , , , ,

ruzisufaka
()

Русификация консоли в Slackware 14

Форум — General

Здравствуйте, товарищи.

У меня в консоли после русификации этого дистра вместо кириллицы отображаются квадраты. Как можно исправить? Чё да где прописать, откорректировать и т. д.? Спасибо за внимание.

*Вопрос скорее не о русификации, а о кириллизации консоли.

 

puyamolina
()

Доступ к pipewire-pulse из разных юзеров?

Форум — Desktop

Здрасьти.

Гента уже давно пытается мне навязать pipewire-сервер как замену pulseaudio-серверу, вот решил попробовать.

У меня браузеры сидять под отдельными юзерами, и хочется чтобы в них тоже звук был. В pulseaudio это решается (вероятно опцией auth-anonymous=1).

В pipewire – не могу найти подходящей опции, чтобы сделать unix сокет общедоступным:

# cp /usr/share/pipewire/pipewire-pulse.conf /etc/pipewire/
# vi /etc/pipewire/pipewire-pulse.conf
...
    {   name = libpipewire-module-protocol-pulse
        args = {
        # the addresses this server listens on
            server.address = [
                # dimgel: Вписал сюда то же, что и в /etc/pulse/*.
                "unix:/tmp/pulse-socket"

...
# ls -l /tmp/pulse-socket 
srwxr-xr-x 1 me me 0 2021-09-27 20:25:53.158629941 /tmp/pulse-socket

И звук есть только под моим основным юзером.

UPD. Юзать TCP вместо unix socket не предлагать: это дичь.

UPD2. Solved.

 , ,

dimgel
()

Документация к языкам программирования

Форум — Development

Всевозможные учебники и книги - это хорошо, но обычно их предлагают купить и часто не совсем дёшево, даже если они описывают базовый уровень. Бесплатным решением, очевидно, является официальная документация. Когда я открыл документацию к python, я был приятно удивлён, что она написана практически как учебник. Для Java вроде бы тоже всё относительно неплохо в этом плане, хотя хотелось бы отдельный оффлайновый pdf.

Мне захотелось скачать себе документацию в подобном виде для C и C++. Зашёл на их официальные сайты, там описание стандарта предлагают получить на сайте ISO за немалые суммы денег. Да и само описание стандарта далеко не для обучения. Хорошо, подумал я, попробую тогда посмотреть документацию к одной из реализаций языка - GCC-CPP, и вижу, что описанное там тоже вовсе не подходит для обучения. Даже описания типов и примеров объявления нет (может плохо искал, но в заголовках не заметил).

Нет, это не тред «подскажите книгу по Сям», таких для начинающих я и сам могу гору насоветовать.

Вопрос следующий: существует ли нормальная доступная бесплатная документация по которой можно изучать C, C++? Официальная документация по другим языкам была бы тоже интересна.


Update

C, C++
Online-ресурсы и учебные пособия для начинающих:

Как дополнение: Рабочая версия стандарта C++14 от 19 ноября 2014 г. (с официального сайта стандарта)


Fortran


Python
В дополнение к официальной документациипереводу руководства Python 3.1):


Object Pascal. Lazarus

Перемещено Klymedy из talks

 , , , ,

grem
()

Помогите грохнуть лог xsession-errors

Форум — General

В общем нужно дропнуть лог .xsession-errors, так как он стал абсолютно мусорным и на ssd он вообще не нужен, так как туда пишется хренолион сообщений о всевозможных багах программ и прочая мусорная лабуда ставшая уже традицией для никсов. Старые способы по созданию линка .xsession-errors в домашнем каталоге на /dev/null и/или изменение ERRFILE в /etc/X11/Xsession не работают. При этом если попытаться переместить лог в /tmp, прописав, например: ERRFILE=${TMPDIR:=/tmp}/.xsession-errors он не создается в /tmp, а эта хреновина продолжает плодить пустые и old файлы .xsession-errors в домашнем каталоге.

 

CoolAller
()

Сбербанк России перешёл на российский сертификат

Новости — Безопасность
Группа Безопасность

Срок действия сертификата SSL, используемого ПАО Сбербанк для защиты своих сервисов, истёк сегодня. Поскольку все корневые сертификаты контролируются США, а также из-за политики санкций, удостоверяющие центры, имеющие право выпустить новый сертификат, отказали ПАО Сбербанк в продлении.

Поэтому с сегодняшнего дня ПАО использует новый сертификат выданный от имени «Russian Trusted Sub CA». Загрузить его можно с сайта госуслуг. По указанной ссылке доступны файлы сертификата и инструкции для популярных ОС (Linux в списке отсутствует). Сайт госуслуг удостоверяется сертификатом, выданным Sectigo и поэтому пока доступен в любых браузерах.

Также новый сертификат уже встроен в браузеры Яндекс.браузер и Атом.

>>> Подробности

 , ,

Aceler
()

Накидайте названий пакетов для OpenWRT

Форум — Talks

Всем доброго, товарищи!

Решил я тут обновить домашний роутер. Выбор пал на TP-Link AX90 (AX6600): наличие двух диапазонов 5 ГГц порешало. Машина — зверь, конечно, нечего сказать. Всё настроил, всё работает. Ну и хорошо.

А вот старичок TP-Link Archer C7 (AC1750) Rev. 2.0 (флешка — 16 МиБ, оперативка — 128 МиБ) теперь как-то особо без дела лежит. Вот и пришла идея потренироваться, так сказать, на кошках, т.е. побаловаться с этими вашими нашими OpenWRT. Почитал, покумекал и понял, что в дефолтной конфигурации оно мне не слишком-то подойдёт. Однако в репах лежит пара тысяч пакетов, но кто все эти люди что они все из себя представляют и зачем они не нужны, — вопрос длительного выкуривания тонны папирос, скрученных из мануалов. А т.к. курить я бросил больше десяти лет назад, то, может, найдётся кто грамотный, который насоветует идей, каких пакетов подкинуть онлайн-конфигуратору образов OpenWRT (или, совсем наоборот, выкинуть оттуда со свистом)?

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

  • соединяться с провайдером по всем популярным типам соединений (например, «Ростелеком» коннектится по PPPoE);
  • уметь в подстановку кастомного MAC-адреса в WAN;
  • NAT + DHCP + IP Reservation + MAC White / Black List, естественно;
  • раздавать IPTV наряду с обычным интернетом (тот же «Ростелеком» у нас использует для этого 802.1Q Tag VLAN), IGMP Multicast и т.д.;
  • уметь в OpenVPN и прочую мякотку для параноиков;
  • поднимать независимые 5 ГГц и 2,4 ГГц сети;
  • File / Media Sharing по популярным протоколам с подключаемых по USB устройств — желательно;
  • UPnP, наверное;
  • IPv6 (ХЗ зачем, но пусть будет);
  • настройка всего, чего только возможно, из веб-морды — обязательно.

С меня — лучи добра и плюсик в карму (коли найдутся апологеты).

UPD: под OpenVPN имеется в виду, конечно же, клиентская часть, а не сервер.

 , , ,

carasin
()

busybox узнать pid или наименование службы открывший порт

Форум — General

Приветствую!
Подскажите как узнать pid процесса открывший порт или как узнать сервис открывший порт.
Описание сложности.
Есть видеокамера rvi. Подключаюсь к ней по телнет, внутри busybox на arm. Проверял камеру nmap один порт смущает 49152, хочу узнать что за процесс.

1. netstat с ключем -p нет
2. ss нет
3. lsof нет
4. fuser и awk нет
5. top не показывает открытый порт
6. ps aux нет, только ps w
https://serverfault.com/questions/219984/busybox-netstat-no-p здесь предлагают смотреть в /proc. запустил grep 49152 /proc/*
пока ничего не нашел (((
Накидайте еще вариантов.

 

kozanostra
()

Как загрузить GRUB2 с EFI ?

Форум — General

Требуется перейти от одного загрузчика (grub4dos), по цепочке к grub2. Поискал в интернетах, там советуют грузить /boot/grub/i386-pc/core.img, но нынче в грубе есть тольк EFI, то бишь /efi.img Попробовал такой конфиг:

iftitle [if exist /efi.img] Bootable Grub2 from /efi.img 
find --ignore-floppies --set-root /efi.img
chainloader /efi.img

И вот, что получается:

Partition table not recognized(chainloader_edx=0xE0, err=4).
Error 43:(http://grub4dos.chenall.net/e/43)
         The BPB hidden_sectors should not be zero for a hard-disk partition boot sector

Press any key to continue...     

 ,

dymdin
()

Iptables - закрыть всё, кроме некоторых

Форум — Admin

Приветствую, господа. Собстнна, сабж. Поднят опенвпн на впс, дебиан 9. Задача: 1. Дать отдельным ип доступ по опенвпн(upd, 1950 порт) в сеть. Моих кривых рук хватило только на: iptables -A INPUT ! -s xxx.xxx.xxx.xxx -j DROP и так повторять, пока не наберётся нужное нам кол-во 2. Закрыть любые дыры\утечки - заблокировать все входящие\исходящие, кроме тех ип, что указаны выше + заблокировать все порты, кроме 443, 1950, 22 и 80-го.

Комментарии в стиле «кури основы» приветствуются, но, увы, с Линуксом работать тесно не требуется, нужно только установить данные правила.

Заранее спасибо!

 , ,

Ktb1
()

Наследование прав доступа от родительского каталога

Форум — General

Есть директория /srv/sites/domain.ltd/html принадлежащая пользователю и группе apache:apache и имеющая права 6770 (rwsrws---). Есть юзер iskatel, который входит в группу apache и он создаёт в этой директории файл, скажем, index.html. Файл автоматом получает принадлежность к юзеру iskatel и группе apache. А я вот ожидал другого результата, ведь наличие suid и sgid битов на каталоге должно приводить к тому что файл у родительского каталога будет наследовать и группу и юзера, то есть юзер должен быть apache. Почему так?

 

sunny1983
()

Сравнение значений на bash

Форум — Admin

Есть 2 файла с содержимым следующего вида

имя значение
Файл 1
green 1
yellow 5
red 11
blue 6
Файл 2
green 22
yellow 66
red 52
blue 89
Мне нужно из значений файла 2 вычесть значения файла 1 и получать эту разницу

Но тут еще сложность в том, что имена могут удаляться и добавляться другие. Поэтому обычное сравнение к примеру 2х файлов не подойдёт.

Как мне это лучше всего реализовать?

 

sandrey81
()