The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
buildworld RPI3 - непонятки с LLVM_TARGET_ENABLE, !*! OldMonster, (Компиляция) 06-Дек-20, 15:37  [ | | | ] [линейный вид] [смотреть все]
ДВС.
строю мир freebsd12.2 на RPI3.
смотрю ps -axwwww | grep TARGET:

56377  1  RN     0:53,09 c++ -target aarch64-unknown-freebsd12.2
--sysroot=/usr/obj/usr/src/arm64.aarch64/tmp
-B/usr/obj/usr/src/arm64.aarch64/tmp/usr/bin
-O2
-pipe
-fno-common
-I/usr/obj/usr/src/arm64.aarch64/lib/clang/libllvm -I/usr/src/contrib/llvm-project/llvm/lib/Target/AArch64
-I/usr/src/contrib/llvm-project/llvm/lib/Target/ARM -I/usr/src/contrib/llvm-project/llvm/lib/Target/Mips
-I/usr/src/contrib/llvm-project/llvm/lib/Target/PowerPC -I/usr/src/contrib/llvm-project/llvm/lib/Target/RISCV
-I/usr/src/contrib/llvm-project/llvm/lib/Target/Sparc -I/usr/src/contrib/llvm-project/llvm/lib/Target/X86 -I/usr/src/lib/clang/include
-I/usr/src/contrib/llvm-project/llvm/include -D__STDC_CONSTANT_MACROS
-D__STDC_FORMAT_MACROS
-D__STDC_LIMIT_MACROS
-DHAVE_VCS_VERSION_INC
-DNDEBUG
-DLLVM_DEFAULT_TARGET_TRIPLE="aarch64-unknown-freebsd12.2"
-DLLVM_HOST_TRIPLE="aarch64-unknown-freebsd12.2"
-DDEFAULT_SYSROOT=""
-DLLVM_TARGET_ENABLE_AARCH64
-DLLVM_TARGET_ENABLE_ARM
-DLLVM_TARGET_ENABLE_MIPS
-DLLVM_TARGET_ENABLE_POWERPC
-DLLVM_TARGET_ENABLE_RISCV
-DLLVM_TARGET_ENABLE_SPARC
-DLLVM_TARGET_ENABLE_X86
-DLLVM_NATIVE_ASMPARSER=LLVMInitializeAArch64AsmParser
-DLLVM_NATIVE_ASMPRINTER=LLVMInitializeAArch64AsmPrinter
-DLLVM_NATIVE_DISASSEMBLER=LLVMInitializeAArch64Disassembler
-DLLVM_NATIVE_TARGET=LLVMInitializeAArch64Target
-DLLVM_NATIVE_TARGETINFO=LLVMInitializeAArch64TargetInfo
-DLLVM_NATIVE_TARGETMC=LLVMInitializeAArch64TargetMC
-ffunction-sections
-fdata-sections
-DNDEBUG
-MD
-MF.depend.Target_Sparc_SparcTargetObjectFile.o
-MTTarget/Sparc/SparcTargetObjectFile.o
-fstack-protector-strong
-Qunused-arguments
-fno-exceptions
-fno-rtti
-std=c++14
-stdlib=libc++
-Wno-c++11-extensions
-c /usr/src/contrib/llvm-project/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
-o Target/Sparc/SparcTargetObjectFile.o

Вопрос:
Меня смущают строки типа
-DLLVM_TARGET_ENABLE_MIPS 
-DLLVM_TARGET_ENABLE_POWERPC
-DLLVM_TARGET_ENABLE_RISCV
-DLLVM_TARGET_ENABLE_SPARC
-DLLVM_TARGET_ENABLE_X86

Зачем, ведь целевая архитектура arm64?
Объясните, плиз.
sudo GUI скрипт, !*! sunjob, (Shell скрипты) 30-Июл-20, 10:17  [ | | | ] [линейный вид] [смотреть все]
добрый день

bash GUI-only скрипт (без использования консоли)
1. zenity для диалога
2. "sudo" для "операций"
3. лог в кат. пользователя

если использовать "sudo без пароля", то все ОК (т.е. для "локального" использования)
в противном случае необходимо вводить пароль (в консоли)

ВОПРОС: как правильно разрулить ситуацию, для "обычного" пользователя с "обычным sudo"?

можно использовать desktop-ориентированные "sudo-GUI" утилиты, но есть неудобства
- их целый зоопарк, на каждый desktop свой свиток
- при наличие "sudo без пароля" добавляется ненужный диалог

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

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

тестировалось на


slackware 12.2/14.*
tde3-14/kde4

tag: bash,zenity,sudo

спасибо

Сложное вычисление на Python и засовывание результата в Ansible, !*! xintrea, (Python) 24-Ноя-20, 15:34  [ | | | ] [линейный вид] [смотреть все]
Нужно мне сделать некоторые вычисления на Python, и результат получить в Ansible.

Делаю так:


  - name: Вычисление суммы
    shell: |
      python <<< "print 1+2"
    register: result

  - debug:
      msg: Результат {{result}}


И при исполнении плейбука ошибка:

fatal: [generatorHost]: FAILED! => {"changed": true, "cmd": "python <<< \"print 1+2\"\n", "delta": "0:00:00.001918", "end": "2020-11-24 15:25:22.719117", "msg": "non-zero return code", "rc": 2, "start": "2020-11-24 15:25:22.717199", "stderr": "/bin/sh: 1: Syntax error: redirection unexpected", "stderr_lines": ["/bin/sh: 1: Syntax error: redirection unexpected"], "stdout": "", "stdout_lines": []}

При этом простое выполнение команды в командной строке работает правильно:

$ python <<< "print 1+2"
3

Как сделать так, чтобы получить значение питоновской команды?

особенности конвертации х86 пакета в х64, !*! gardener, (C/C++) 19-Сен-20, 14:31  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте!

Есть древняя приложуха с исходниками писанная под 32-х битную архитектуру, может даже конкретно под Slackware 13, не знаю, но которую сейчас понадобилось собрать и установить на Centos 7.0 с 64-х битной архитектурой.

Как говорится: "Никогда не было и вот снова случилось!"
Мои знания заканчиваются стандартной последовательность "./configure; make; make install"
Но я понятия не имею что делать если что-то идет не так.
А поскольку приложуха самописная, то и инет молчит об особенностях ее установки.

./confgure --help выдает много чего полезного, я даже нахожу много знакомых букв, но на этом все.

Как это 32-х битное приложение конвертировать в 64-ех битное, возможно ли такое?

Совершенно не понимаю направление в котором копать. Про цели make почитал, вроде понятно, но как узнать какие значения нужны в каждом конкретном случае? Главное, не знаю принципов организации исходников и последующей сборки приложения. Подскажите, если ли какой-то мануал, или серия статей, вообще в каком направлении и в какой последовательности что почитать!
С си знаком, даже что-то писал, но все обычно заканчивалось простой компиляцией одного исходника и все.
Надеюсь на ваши подсказки.

Копирование указателя и выделение памяти, !*! datswd, (C/C++) 17-Сен-20, 20:48  [ | | | ] [линейный вид] [смотреть все]
Всем привет!

Есть два указателя

char *a, *b;

Потом мы делаем

a = b
a = malloc(100);
strcpy(a, "lolo");
printf("%s", b);


Когда делается malloc связка между a и b теряется. И printf выводит null.

Можно ли как-нибудь сделать так, чтобы связка между указателями не терялась и printf выводил "lolo"?

Заранее благодарен.



Умирает скрипт из автозапуска, !*! dvl, (Shell скрипты) 09-Окт-20, 16:00  [ | | | ] [линейный вид] [смотреть все]
Уважаемые спецы:
имеется проблема - есть скрипт на Bash , в нем простой бесконечный цикл (ping через nc).
При запуске из консоли - работает чудно и бесконечно, поставил в автозагрузку, стартует но умирает в течении 1 -5 минут.
Есть идеи?

(старт через init.d , все это в BuzyBox).



Рекурсивное использование asprintf, !*! datswd, (C/C++) 27-Сен-20, 09:14  [ | | | ] [линейный вид] [смотреть все]
Всех приветствую.

В GNU libc есть функция asprintf, которая делает то же самое, что и sprintf, но динамически выделяет память в результирующей переменной.

https://www.gnu.org/software/libc/manual/html_node/Dynamic-O...

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

asprintf(&a, "%s%s", a, "123");

В результате в переменной a окажется её содержимое дополненное строкой "123".

Вопрос в том, что происходит с точки зрения памяти? Память, изначально выделенная под a, утечет? Или там всё красиво и будет сделан realloc?

Заранее благодарен.

  • https elixir bootlin com glibc glibc-2 31 source libio vasprintf c L32судя по , !*! pavel_simple. (?), 22:11 , 27-Сен-20 (1)
    > Всех приветствую.
    > В GNU libc есть функция asprintf, которая делает то же самое, что
    > и sprintf, но динамически выделяет память в результирующей переменной.
    > https://www.gnu.org/software/libc/manual/html_node/Dynamic-O...
    > Если сделать вот так:
    > asprintf(&a, "%s%s", a, "123");
    > В результате в переменной a окажется её содержимое дополненное строкой "123".
    > Вопрос в том, что происходит с точки зрения памяти? Память, изначально выделенная
    > под a, утечет? Или там всё красиво и будет сделан realloc?
    > Заранее благодарен.

    https://elixir.bootlin.com/glibc/glibc-2.31/source/libio/vas...
    судя по ^^^ делает реаллок
    но проще ведь пупо проверить, не? в цикле?

    сообщить модератору +/ответить
Параллельное исполнение в bash, !*! Аноним, (Shell скрипты) 08-Окт-20, 19:15  [ | | | ] [линейный вид] [смотреть все]
С год назад хотел организовать параллельное исполнение, но что-то не вышло, и я оставил всё на одном ядре. Очень медленно. Как лучше его сделать? Хотя бы без синхронизации (синхронизация фоновых жобов развлечение ещё то, не хочу городить грязь, где она не нужна).

Один. Нужно просто запускать ещё 1 процесс по процессу на ядро как только завершился предыдущий и пока есть работа.

Два. Нужно организовать вывод из всех скриптов, разделить экран по числу ядер в tmux или можно придумать что-нибудь ещё?

Жду ваших советов и предложений, спасибо.

  • Как лучше сделать Загуглить решение, очевидно же Научиться гуглить и читать до, !*! Аноним (1), 19:41 , 08-Окт-20 (1) –3
    Как лучше сделать? Загуглить решение, очевидно же. Научиться гуглить и читать документацию.
    сообщить модератору –3 +/ответить
  • У Вивека посмотрите https www cyberciti biz faq how-to-run-command-or-code-in-, !*! Licha Morada (ok), 20:55 , 08-Окт-20 (3)
    > С год назад хотел организовать параллельное исполнение, но что-то не вышло, и
    > я оставил всё на одном ядре. Очень медленно. Как лучше его
    > сделать?

    У Вивека посмотрите.
    https://www.cyberciti.biz/faq/how-to-run-command-or-code-in-.../

    сообщить модератору +/ответить
  • пишешь простейший Makefile make -jX, !*! system (??), 15:33 , 09-Окт-20 (14)
    > С год назад хотел организовать параллельное исполнение, но что-то не вышло, и
    > я оставил всё на одном ядре. Очень медленно. Как лучше его
    > сделать? Хотя бы без синхронизации (синхронизация фоновых жобов развлечение ещё то,
    > не хочу городить грязь, где она не нужна).
    > Один. Нужно просто запускать ещё 1 процесс по процессу на ядро как
    > только завершился предыдущий и пока есть работа.
    > Два. Нужно организовать вывод из всех скриптов, разделить экран по числу ядер
    > в tmux или можно придумать что-нибудь ещё?
    > Жду ваших советов и предложений, спасибо.

    пишешь простейший Makefile + make -jX

    сообщить модератору +/ответить
  • Какая же гадость этот parallel Он поддерживает вывод в tmux казалось бы что ещ, !*! Аноним (2), 03:14 , 11-Окт-20 (24)
    Какая же гадость этот parallel. Он поддерживает вывод в tmux (казалось бы что ещё нужно!) но запускает при этом 100 раз одновременно и ломает вывод консоли. Ещё и наспамила в консоль своим бредом сначала, автор очевидный аутист.

    Ну в принципе вот это наверное, да. Утянул себе нужное, надо закончить и посмотреть, как будет, а то xargs конечно нормально работает, но мешанина вывода совершенно нечитаемая. https://gist.github.com/mlgill/ad2693f17aaa720ef777

    сообщить модератору +/ответить


Clang vs Gcc: две компиляторных системы в одном дистрибутиве, !*! sidtver, (Компиляция) 08-Окт-20, 13:50  [ | | | ] [линейный вид] [смотреть все]
  Компилятор - это помимо собственно фронтенда/оптимизаций/кодогенератора еще binutils, библиотеки runtime-поддержки и стандартные библиотеки. У gcc - это, например, gas/ld, glibc, libstdc++. По мере своего развития длительное время компилятор clang использовал binutils и библиотеки от компилятора gcc. Но разработчики clang последовательно движутся к полной замкнутости своего проекта. У них есть свой ассемблер (llvm-as), они активно развивают свой линкер, сделали свой аналог libstdc++ с названием libc++ и разрабатывают свой аналог glibc с названием libc. Наличие стандарта C/C++ должно гарантировать компиляцию программ обоими компиляторами, но никак не гарантирует совпадение хедеров из двух разных реализаций библиотек. (Например, errno может быть переменной, а может быть макросом, раскрывающимся в вызов функции и т.д. и т.п.) У двух независимо-разрабатываемых библиотек неизбежно будут библиотеки без бинарной совместимости.
  Рассмотрим теперь Unux-дистрибутив, который собран некоторой версией компилятора gcc. В частности, в дистрибутиве будут glibc, libstdc++. Все остальные библиотеки/программы общего назначения будут собраны и слинкованы с glibc/libstdc++. В дистрибутиве также будет компилятор clang. Но компилятор clang при компиляции программ будет линковать их с libc/libc++. Допустим, теперь некоторое приложение X собрано из исходников с помощью clang'а. При этом приложению X нужна библиотека Y, которая есть в дистрибутиве, но собрана с помощью gcc. Тогда X при запуске требует (динамической) линковки с libc/libc++, а Y - glibc/libstdc++. Но гарантий бинарной совместимости libc/libc++ и glibc/libstdc++ нет. Более тонкая ситуация может быть из-за того, что хедеры библиотеки Y будут фактически давать разные варианты, при компиляции разными компиляторами.

  Значит, ли это что дистрибутив фактически превращается в объединение двух дистрибутивов, когда все программы/библиотеки должны быть собраны в двух экземплярах: с помощью gcc и с помощью clang'а?

P.S. Пару лет назад разработчики gcc поменяли алгоритм манглирования C++ имен. У разработчиков clang на полгода перестал "работать" компилятор. Но тогда у них была зависимость от gcc. Они не были довольны изменениями. С другой стороны компилятор clang создает ассемблер, который в общем случае не может ассемблировать gas. В отсутствии стандартов на манглирование, хедеры стандартных библиотек, механизм EH, процессирование шаблонов, ассемблер и т.п. две системы очень быстро станут несовместимыми.

  • Все держу только на gcc и шланги с llvm выпилены напрочь Но на сколько я знаю, , !*! Аноним (-), 15:06 , 08-Окт-20 (1)
    Все держу только на gcc и шланги с llvm выпилены напрочь. Но на сколько я знаю, ссылки на библиотечные функции прописаны у эльфов, у меня нет под рукой апы сделаной шлангом но мне что-то подсказывает что там обычный эльф.
    сообщить модератору +/ответить
  • если abi api не нарушено, то какая разница какой там листинг ассемблера и хедеры, !*! Аноним (2), 16:54 , 08-Окт-20 (2)
    >   В отсутствии стандартов на манглирование, хедеры стандартных библиотек, механизм EH, процессирование шаблонов, ассемблер

    если abi/api не нарушено, то какая разница какой там листинг ассемблера и хедеры/сорцы? А как обрабатывать шаблоны уж точно прописывается в стандарте.

    > и т.п. две системы очень быстро станут несовместимыми.

    когда винду успели пересобрать под icc и mingw?

    сообщить модератору +/ответить
  • У меня штук 20 разных компиляторов с разными либами стоит, гента Можно любой си, !*! Аноним (2), 19:05 , 08-Окт-20 (8)
    У меня штук 20 разных компиляторов с разными либами стоит, гента. Можно любой системны пакет собрать произвольным системным компилятором любой версии, binutils правда придётся вручную переключать (зачем использовать не последнюю версию?), переключение шланг/гцц вообще без проблем переменной окружения. Проблем не замечал, но я массово и не собираю шлангом -- он всегда хуже при ближайшем рассмотрении (что-то простое он может соптимизировать лучше). Или собрать какой-нибудь пакет и все зависимости с другой libc или вообще для другой архитектуры. В частности, собираю софт для венды, когда я проверял, он потом работал в 7, 8 и 10 на системной libc (без cygwin).
    сообщить модератору +/ответить


CenOS 8 -- Qmail-1.03, !*! tukanen, (Компиляция) 18-Сен-20, 16:20  [ | | | ] [линейный вид] [смотреть все]
Не возможно компилировать qmail.1.03 на сервер CentOS 8. (make: *** [Makefile:1582: qmail-smtpd.o] Error 1) такую ошибку выдает. Спасибо за помощь .
Как правильно использовать QMediaMetaData для определения парам, !*! Oleg1980, (C/C++) 23-Сен-20, 14:48  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте! Подскажите, как мне определить параметры аудиофайла без подключения внешних библиотек MediaInfo при помощи встроенных в Qt инструментов, таких, как QMediaMetaData: битрейт, частоту дискретизации, битовую глубину, формат. Мне нужно получить эти параметры из существующего файла для последующего перекодирования аудиофайла в другой формат. Я пытался использовать QMediaMetaData таким образом (при том не знаю правильно ли я использовал так же QMediaObject):


#include <QtMultimedia/QMediaMetaData>
#include <QtMultimedia/QMediaObject>
#include "mainwindow.h"
#include "ui_mainwindow.h"
.
.
.
void MainWindow::on_pushButton_1_clicked()
{
   QMediaObject mediafile; // Здесь определяю медиаобъект
   QString file_name = "/run/media/helg/WDC/test.aac"; // Путь к медиафайлу  
   mediafile.setMedia(QUrl(file_name));// Привязываю путь до медиаобъекта
   QString bitrate = mediafile.metaData(QMediaMetaData::AudioBitRate).toString(); // Определяю битрейт медиаобъекта
   // Далее идет обработка переменных bitrate и т.д.
   .
   .
}
.
.

На данном этапе программа естественно выдает ошибки на этапе компиляции, я даже не уверен на правильном ли я пути.

Python: возможно ли использования кодировок отличных от utf8?, !*! Аноним, (Python) 13-Авг-20, 23:29  [ | | | ] [линейный вид] [смотреть все]
Добрый день. Интересует способ использовать utf16 в строках в исходнике (без костылей которые я могу придумать, но будет больно поддерживать).

Указание кодировки в формате

# -*- coding: utf16 -*-
не работает (пару лет назад работало): если файл с BOM, то пишет
SyntaxError: Non-UTF-8 code starting with '\xff' in file ../../tx_utf16.py on line 1, but no encoding declared;
если без
SyntaxError: Non-UTF-8 code starting with '\xff' in file ../../tx_utf16.py on line 4194, but no encoding declared;
естественно это не utf-8 это utf-16, и я указал кодировку. Зачем он тупит?

  • SyntaxError Non-UTF-8 code starting with Python 3 по умолчанию использует UTF-8, !*! eRIC (ok), 11:16 , 19-Авг-20 (5)
    SyntaxError: Non-UTF-8 code starting with
    > '\xff' in file ../../tx_utf16.py on line 4194, but no encoding declared;

    > естественно это не utf-8 это utf-16, и я указал кодировку. Зачем
    > он тупит?

    Python 3 по умолчанию использует UTF-8, скорее всего на строчке 4194 у вас данные которые написаны не в UTF-8 кодировке. Попробуйте использовать конструкции decode/encode чтобы перевести в правильной кодировке данные программе.


    сообщить модератору +/ответить
Как ускорить выполнения скрипта shell (проверка POS принтера), !*! Pablic, (Shell скрипты) 17-Авг-20, 16:23  [ | | | ] [линейный вид] [смотреть все]
В общем, есть компьютеры к ним подключены чековые принтеры Posiflex, необходимо при загрузке системы проверить подключен ли чековый принтер к COM порту или нет, если подключен то сделать симлинк для freerdp.
Накидал shell скрипт который проверяет на двух скоростях подключен ли принтер или нет, но проблема вывалилась следующая: если к порту ничего не подключено то проверка выполняется долго ~ 30-35сек. Не могу никак победить проблему, подскажите может кто сталкивался, реализовывал примерно такое.

Udev при нахождении платы расширения в компе сохраняет переменные окружения примерно так:
RS232_4_DEVICE=/dev/ttyS4
RS232_5_DEVICE=/dev/ttyS5


Далее скрипт:
#! /bin/sh

. $TS_GLOBAL

case "$1" in
    init)
        info_msg "Starting POS printer search... "
        for dev in 0 1 2 3 4 5 6 7 8 9; do
            if [ -n "`eval echo '$RS232_'$dev'_DEVICE'`" ] ; then
                device=`eval echo '$RS232_'$dev'_DEVICE'`
                # Проверяем порты на скоростях
                for speed in 19200 115200
                do
                    prn_found=0
                    #Устанавливаем на порту скорость и некоторые параметры
                    /bin/stty -F $device $speed raw -echo clocal crtscts cread &
                    #Когда на порту ничего нет, ждем и убиваем процесс stty
                    waitpid=$!
                    while kill -0 ${waitpid} 2>/dev/null ; do
                        sleep 1
                        /bin/kill -0 ${waitpid} 2>/dev/null
                        if [ $? -eq 0 ]; then
                            #Убиваем процесс, заканчиваем работу скрипта, похоже там ничего на пор ту не висит
                            kill ${waitpid} 2>/dev/null
                            break
                        else
                            #Процесса уже нет, есть вероятность что к порту подключено оборудование
                            #Редиректим вывод с порта в FD
                            exec 3<$device
                            #Редиректим вывод с FD в файл
                            /bin/cat <&3 > /tmp/ttyDump.dat &
                            #сохраняем PID для cat
                            PID=$!
                            #Посылаем команду в порт
                            printf "\x1d\x49\x43" > $device
                            #Ждем вывод
                            sleep 1
                            #Убиваем редирект cat
                            kill $PID
                            #Подавляем вывод "Terminated"
                            wait $PID 2>/dev/null
                            #освобождаем FD
                            exec 3<&-
                            AURA=`cat /tmp/ttyDump.dat | sed 's/_//g' | sed 's/^@//g'`
                            if [ -n "$AURA" ]; then
                                #Принтер отозвался на порту таком то и скорости такой то...
                                prn_found=1
                                logger -t $0 "POS printer model: AURA $AURA found on port $device speed $speed"
                                rm -rf /tmp/ttyDump.dat
                                # создаем символическую ссылку POSPRN для freerdp
                                for num in 0 1 2 3 4 5 6 7 8 9; do
                                    if [ -L /dev/POSPRN$num ] ; then
                                        if [ `readlink /dev/POSPRN$num` == $device ] ; then
                                            break;
                                        fi
                                    elif [ ! -L /dev/POSPRN$num ]; then
                                            ln -s $device /dev/POSPRN$num
                                            break;
                                    fi
                                done
                            else

                                logger -t $0 "POS printer model: AURA not found on port $device speed $speed"
                                rm -rf /tmp/ttyDump.dat
                            fi
                            break
                        fi
                    done
                    if [ "$prn_found" -eq "1" ]; then
                        #Если нашел принтер, прекращаю проверку по скоростям
                        success_msg "POS printer model: AURA $AURA found on port $device speed $speed"
                        break
                    fi
                done
            fi
        done
    ;;
    help)
        echo "Usage: $0 init"
    ;;
    *)
        exit 1
    ;;
esac

exit 0

Возможно можно оптимизировать некоторые блоки скрипта, критику приемлю

  • вероятно я чего-то не понял, но почему не дергать скрипт через udev при обнаруже, !*! Аноним (2), 08:45 , 18-Авг-20 (1)
    > Udev при нахождении платы расширения в компе сохраняет переменные окружения примерно так:
    > for dev in 0 1 2 3 4 5 6 7 8 9; do

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

    сообщить модератору +/ответить
  • Воткни принтер через переходник COM-USB и не возись с COM портами напрямую , !*! ACCA (ok), 22:04 , 18-Авг-20 (7)
    Воткни принтер через переходник COM-USB и не возись с COM портами напрямую.
    сообщить модератору +/ответить


bash, передача команды строкой, !*! sunjob, (Shell скрипты) 13-Июл-20, 11:07  [ | | | ] [линейный вид] [смотреть все]
добрый день

надо передать "составную" команду строкой
"исходный вариант команды" - закомментирован
с набегу/нагуглю не разобрался

понимаю, что непонимаю глубинных смыслов башизма :o)

буду благодарен за волшебные пендили, подсказки, ссылки, мымсли идеи (желательно, без особых извращений современного баша)

спасибо


#!/bin/sh
#///////////////////////////////////////////////////////////////////////////////
cmd()
#///////////////////////////////////////////////////////////////////////////////
{
$CMD
}
#///////////////////////////////////////////////////////////////////////////////

cd $TMP
touch test_image.{iso,img,txt}

#
# исходный вариант
#
#zenity \
#--file-selection --save     \
#--filename=dvd.iso          \
#--file-filter="*.iso *.img" \
#--title="Выбор файла"; exit 1


   X=$'\040'
MASK="*.iso *.img"  ; TITLE="Выбор файла"
MASK="*.iso$X*.img" ; TITLE="Выбор$Xфайла"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=*.iso\ *.img  \
--title=Выбор\ файла        \
"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=*.iso$X*.img  \
--title=Выбор$Xфайла        \
"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=$(echo *.iso$X*.img) \
--title=$(echo Выбор$Xфайла)      \
"

cmd

exit 0

исходные


bash-3.1.017-i486-2
slackware 12.2

Одна копия telegram bot на python, !*! hebeseyir, (Python) 25-Сен-19, 14:52  [ | | | ] [линейный вид] [смотреть все]
Подскажите средство для того чтобы всегда была запущена только одна копия python скрипта на разных серверах, которая запускает бота
Иначе, если запущено 2 бота, то сообщения в чате дублируются
  • Unix-way решение проблемы Создаете отдельных пользователей на серверах, и рас, !*! Аноним (1), 23:38 , 25-Сен-19 (1)
    Unix-way решение проблемы...
    Создаете отдельных пользователей на серверах, и раскидываете их SSH-ключи по серверам. Чтобы от этого пользователя на каждом сервере можно было подключиться на все остальные серваки.

    Перед тем, как стартануть бота, по SSH берете список процессов с каждого сервера. Если он там запущен, ничего не запускаете. Если запущенных процессов на других серверах нет, запускаете.

    сообщить модератору +/ответить
  • Переделать скрипт, скорее всего достигнут порог некомпетентности скрипта Если , !*! fantom (??), 15:33 , 16-Июл-20 (5)
    > Подскажите средство для того чтобы всегда была запущена только одна копия python
    > скрипта на разных серверах, которая запускает бота
    > Иначе, если запущено 2 бота, то сообщения в чате дублируются

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

    сообщить модератору +/ответить
вставка текста из скрипта , !*! Roman, (Shell скрипты) 08-Июл-20, 22:05  [ | | | ] [линейный вид] [смотреть все]
господа не подскажите как мне вставить текст из скрипта который содержит переменные $trampam в файл но их вставить как текст.
а то у меня они воспринимаются как переменные и которых нет и соответственно не вставляются
Сценарий для сортировки строк, !*! Gridal, (Shell скрипты) 23-Июн-20, 20:15  [ | | | ] [линейный вид] [смотреть все]
Добрый день! Помогите новичку в BASH. Есть несколько строк с разным количеством символов (aa,bbbb, ccc, 111 и т.д.). Их надо отсортировать так, чтобы вначале шли строки с наибольшим кол-ом символов, а строки с одинаковым кол-ом символов шли в алфавитном порядке.
Я знаю команды для подсчета кол-ва символов в строке (expr length) и могу их сравнивать между собой. Если бы строк было две - все было бы просто. А с большим кол-ом строк мне никак не придумать как их отсортировать.
Заранее спасибо!


оказия.. bsd 12.0 = > 12.1, !*! nekto, (C/C++) 17-Июн-20, 14:08  [ | | | ] [линейный вид] [смотреть все]
оказия.. bsd 12.0 = > 12.1

фря, управление пакетами сугубо штатное и бинарное, переезд стандартный
аппа, cmake, и прочие.. сборка:

OK   - 12.0
FAIL - 12.1 (-RELEASE r354233 GENERIC  i386)

ld: error: libtest-lib.so.0.1.1: undefined reference to XFree
ld: error: libtest-lib.so.0.1.1: undefined reference to XGetWMHints
ld: error: libtest-lib.so.0.1.1: undefined reference to XSetClassHint
ld: error: libtest-lib.so.0.1.1: undefined reference to XSetCommand
ld: error: libtest-lib.so.0.1.1: undefined reference to XSetWMHints
ld: error: libtest-lib.so.0.1.1: undefined reference to XDefaultRootWindow
ld: error: libtest-lib.so.0.1.1: undefined reference to XOpenDisplay
ld: error: libtest-lib.so.0.1.1: undefined reference to XRootWindowOfScreen
ld: error: libtest-lib.so.0.1.1: undefined reference to XScreenOfDisplay

...

И {к,ш}то виноват и куды - копать ?
Мнение стаи компетентных комрадофф ?



Завершение дочерних процессов 2 уровня, !*! Аноним, (Shell скрипты) 13-Май-20, 01:56  [ | | | ] [линейный вид] [смотреть все]
Подскажите, как лучше его организовать? Ситуация следующая: дети запускаются фоном, после чего они рождают ещё детей. Мне нужно всех их вырезать, потому что, если их не прибить собственноручно, они остаются жить навсегда. Добился нужного через pkill -g $$ в конце (повесил на выход), но возникают определённые подозрения (в частности в связи с тем, что при самоубийстве в баше не появляется приглашение, видимо фишка баша для провисших дескрипторов) или же вообще ломается любой ввод (он не отображается). Я так понял, это вообще проблема, в линуксе нельзя просто взять и узнать, кого мы родили. Мне только pstree -p $bgjobpid показывает, что там кто-то где-то висит во внучках (он обходит всех на предмет родителей?), разбирать выхлоп pstree чёт видится извратом. Вообще, в интернете обещали и что pkill -P $$ будет достаточно, да только дети детей то остаются!

Суть дела: мне нужно убить всех детей вместе с их детьми средствами, доступными родителю, в идеале получить перечень пидов и их перебить. Я могу получить пид мейна, скажем, через ppid/pgrp/tpgid, или даже того, кто запускал (баш) из sid, но я не могу получить перечень порождённых процессов и желательно перебить их всех по цепочке? Если не останавливать фоновый процесс через прямое убийство (что я делал изначально, поскольку я прекрасно вижу его в мейне), он вместе со всеми порождёнными (уже не видимыми мне) им переходит под инит при завершении. Если останавливать, порождённые им процессы остаются висеть (под инитом). Пробовал уже по-всякому, и kill, и pkill, и всё остальное, но внучки остаются недосягаемыми.

Из информации, полученной со стаковерфлоу, я сделал вывод, что единственный выход тут, это использовать неймспейс (и грохать его). Так ли это? Как же живут пользователи других систем?

И я смотрю unshare с --kill-child=sigkill как-то странно реагирует на ^C -- я так понимаю ему прилетает kill и sigint не доходит до приложения, в следствии чего я не могу обработать этот кейс в коде -- всё слишком быстро умирает. Или даже не так, но умирает всё равно раньше, чем я успеваю почистить файлы в перехватчике int. А с другими сигналами kill-child (term,int), всё умирает, но приглашение не появляется. Т.е. неймспейсы тут не подходят.

Это конечно хорошо, что мой код работает, но плохо, что я его не понимаю. Чем мне грозит pkill -g $$ на практике? Видимых проблем я не вижу, всё в полном порядке, вот только провисшие дескрипторы меня пугают.

  • Что-то не то с порядком исполнения, или же временем Если на exit повешено неско, !*! Аноним (2), 03:02 , 13-Май-20 (1)
    Что-то не то с порядком исполнения, или же временем? Если на exit повешено несколько действий, прилетает sigterm. Если там один pkill -g $$, всё нормально завершается. повесил новую ловушку на выход в ловушке на выход. Что-то странное, я всё чаще начинаю замечать, что не понимаю, почему мой баш работает и как он это делает.
    сообщить модератору +/ответить
  • Да тебе бы сценарии к триллерам писать, а не вот это вот всё , !*! Аноним (2), 07:19 , 13-Май-20 (2) +1
    Да тебе бы сценарии к триллерам писать, а не вот это вот всё) ))
    сообщить модератору +1 +/ответить
  • предлагаю название темы поменять, потому-что по таким словам как убийство внуч, !*! eRIC (ok), 13:32 , 13-Май-20 (3) +1
    предлагаю название темы поменять, потому-что по таким словам как: "убийство внучек", "суицид" ресурс OpenNet не забанили
    сообщить модератору +1 +/ответить
  • Породив внуков, дети завершаются или остаются жить Тут нужно либо обучить детей, !*! Аноним (4), 14:39 , 13-Май-20 (4)
    > Ситуация следующая: дети запускаются фоном, после чего они рождают ещё детей.

    Породив внуков, дети завершаются или остаются жить? Тут нужно либо обучить детей передавать прилетающие SIGTERM'ы и SIGINT'ы внукам (см. встроенные в bash команды trap и jobs), либо как-то передавать список внуков родителю.

    > что единственный выход тут, это использовать неймспейс (и грохать его).

    В Linux ещё control groups, и они, как мне представляется, более подходят к данному случаю.

    сообщить модератору +/ответить
  • чисто из любопытства, какой сценарий привел победе fork на pthread_create , !*! user user (?), 15:24 , 20-Май-20 (19)
    чисто из любопытства, какой сценарий привел победе fork на pthread_create?
    сообщить модератору +/ответить


Возможно ли на regexp perl удалить определенное число байтов?, !*! zhukovia, (Perl) 05-Фев-20, 13:29  [ | | | ] [линейный вид] [смотреть все]
Есть строка текста в которой в произвольном месте может содержаться "мусорный" текст который нужно вычистить. У "мусора" следующие параметры он оканчивается на \x00\x00 (в hex представлении), а в начале \xE3\x33 но при этом он не всегда находится в самом начале иногда перед ним бывает 1 или 2 символа. При этом длинна "мусорной" строки всегда 70 байт. Встречается "мусор" произвольное число раз.

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




Поскажите как в SQL запросить N предпоследних значений, !*! A.Stahl, (Базы данных, SQL) 11-Фев-20, 08:58  [ | | | ] [линейный вид] [смотреть все]
Да, такой вот непонятный заголовок.
Представьте что есть таблица вида
struct table
{
int id;
int data1;
int data2;
};

id растёт, но не с шагом 1. Т.е. индексы могут быть 1,2,3,5,7,8,9,11,13...
Нужно выбрать, скажем, 5 последних записей (это, кажется, несложно -- есть LIMIT), а вот как выбрать 5 предпоследних? 5 пред-предпоследних?

Не хочет работать valgrind в Astra Linux 1.3, !*! xintrea, (Отладка и профилирование) 18-Мрт-20, 17:22  [ | | | ] [линейный вид] [смотреть все]
Операционка Astra Linux 1.3.

В системе стоит Valgrind 3.7.0. При попытке запуска под valgrind программы, собранной на этой же машине, происходит ошибка:


$ valgrind --tool=callgrind ./iks
==29808== Callgrind, a call-graph generating cache profiler
==29808== Copyright (C) 2002-2011, and GNU GPL'd, by Josef Weidendorfer et al.
==29808== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==29808== Command: ./iks
==29808==
==29808== For interactive control, run 'callgrind_control -h'.

valgrind: m_debuginfo/readelf.c:2386 (vgModuleLocal_read_elf_debug_info): Assertion 'di->bss_size == shdr->sh_size' failed.
==29808==    at 0x3803BA6F: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x3803BBB2: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x38068CDC: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x38061069: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x38081BF8: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x380A894A: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x3807E938: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x3807B63F: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x3807C798: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==29808==    by 0x3808C339: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable
==29808==    at 0x40162AA: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x4006747: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x40080D2: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x400C351: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x400E005: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x400C56E: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x4002ADD: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x40141CD: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x4004D07: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==29808==    by 0x40014E7: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)


Note: see also the FAQ in the source distribution.
It contains workarounds to several common problems.
In particular, if Valgrind aborted or crashed after
identifying problems in your program, there's a good chance
that fixing those problems will prevent Valgrind aborting or
crashing, especially if it happened in m_mallocfree.c.

If that doesn't help, please report this bug to: www.valgrind.org

In the bug report, send all the above text, the valgrind
version, and what OS and version you are using.  Thanks.


Гуглеж ничего не дал, за исключением совета, что надо собрать более свежий valgrind. Океюшки, деинсталлирую родной valgrind 3.7.0, собираю из исходников актуальный 3.15.0, устанавливаю.

Запуск под 3.15.0 завершается все с той же ошибкой:


$ valgrind --tool=callgrind ./iks
==3760== Callgrind, a call-graph generating cache profiler
==3760== Copyright (C) 2002-2017, and GNU GPL'd, by Josef Weidendorfer et al.
==3760== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==3760== Command: ./iks
==3760==
==3760== For interactive control, run 'callgrind_control -h'.

valgrind: m_debuginfo/readelf.c:2916 (vgModuleLocal_read_elf_debug_info): Assertion 'di->bss_size == a_shdr.sh_size' failed.

host stacktrace:
==3760==    at 0x58029189: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58029297: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58029431: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58058AC7: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x5804AA07: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x580787DF: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58083EBA: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58073BEE: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x580700FA: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x58072436: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)
==3760==    by 0x580D8FE4: ??? (in /usr/lib/valgrind/callgrind-amd64-linux)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable syscall 9 (lwpid 3760)
==3760==    at 0x40162AA: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x4006747: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x40080D2: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x400C351: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x400E005: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x400C56E: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x4002ADD: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x40141CD: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x4004D07: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
==3760==    by 0x40014E7: ??? (in /lib/x86_64-linux-gnu/ld-2.13.so)
client stack range: [0x1FFEFFF000 0x1FFF000FFF] client SP: 0x1FFEFFF558
valgrind stack range: [0x100306A000 0x1003169FFF] top usage: 8344 of 1048576


Note: see also the FAQ in the source distribution.
It contains workarounds to several common problems.
In particular, if Valgrind aborted or crashed after
identifying problems in your program, there's a good chance
that fixing those problems will prevent Valgrind aborting or
crashing, especially if it happened in m_mallocfree.c.

If that doesn't help, please report this bug to: www.valgrind.org

In the bug report, send all the above text, the valgrind
version, and what OS and version you are using.  Thanks.


Вопрос: что еще где надо докрутить, чтобы valgrind нормально работал?
  • В догонку, проблемный код valgrind такой code define FIND _sec, _se, !*! xintrea (ok), 17:39 , 18-Мрт-20 (1)
    В догонку, проблемный код valgrind такой:

    #           define FIND(_sec, _seg) \
                do { \
                   ElfXX_Shdr a_shdr; \
                   ML_(img_get)(&a_shdr, dimg, \
                                INDEX_BIS(shdr_dioff, i, shdr_dent_szB), \
                                sizeof(a_shdr)); \
                   if (di->_sec##_present \
                       && 0 == ML_(img_strcmp_c)(dimg, shdr_strtab_dioff \
                                                 + a_shdr.sh_name, "." #_sec)) { \
                      vg_assert(di->_sec##_size == a_shdr.sh_size); \
                      /* JRS 2013-Jun-01: the following assert doesn't contain */ \
                      /* any ==s, which seems to me to be suspicious. */ \
                      vg_assert(di->_sec##_avma +  a_shdr.sh_addr + _seg##_dbias); \
                      /* Assume we have a correct value for the main */ \
                      /* object's bias.  Use that to derive the debuginfo */ \
                      /* object's bias, by adding the difference in SVMAs */ \
                      /* for the corresponding sections in the two files. */ \
                      /* That should take care of all prelinking effects. */ \
                      di->_sec##_debug_svma = a_shdr.sh_addr; \
                      di->_sec##_debug_bias \
                         = di->_sec##_bias + \
                           di->_sec##_svma - di->_sec##_debug_svma; \
                      TRACE_SYMTAB("acquiring ." #_sec \
                                   " debug svma = %#lx .. %#lx\n",       \
                                   di->_sec##_debug_svma, \
                                   di->_sec##_debug_svma + di->_sec##_size - 1); \
                      TRACE_SYMTAB("acquiring ." #_sec " debug bias = %#lx\n", \
                                   (UWord)di->_sec##_debug_bias);           \
                   } \
                } while (0);

                /* SECTION   SEGMENT */
                FIND(text,   rx)
                FIND(data,   rw)
                FIND(sdata,  rw)
                FIND(rodata, rw)
                FIND(bss,    rw) <!-- Проблема тут
                FIND(sbss,   rw)

    #           undef FIND


    сообщить модератору +/ответить
Помогите с пакетом Плотностной алгоритмом кластеризации DBSCAN, !*! qqq, (Разное) 05-Мрт-20, 11:59  [ | | | ] [линейный вид] [смотреть все]
Привет всем! Для работы нужно использовать Плотностный алгоритм кластеризации DBSCAN! Но ни где не могу найти системные требования. У меня установлен питон но я ни как не могу понять что ему еще нужно для полного счастья!
Помогите плиз.

как написать этот код на BASH, !*! tukanen, (Shell скрипты) 13-Фев-20, 15:18  [ | | | ] [линейный вид] [смотреть все]
Пройти в папке по всем файлам и записать на сам файл время создания файла.
С батом этот код вот так реализованно. Хотел бы что то на SHELL или Python. Спасибо за Внимание.

@echo off
for %%f in (*.txt) do (
for /f "tokens=1*" %%a in ('forfiles /m "%%f" /c "cmd /c echo @fdate @ftime"') do (
echo.>> "%%f"
echo Created: %%a - %%b >> "%%f"
)
for /f "tokens=1-5 delims=.: " %%j in ('dir /a-d /tc "%%f" ^| findstr /rc:"^[^ ]"') do echo Changed: %%j.%%k.%%l - %%m:%%n>> "%%f"
)
exit



Как по файлам вычислить из какой они ревизии Git?, !*! Фёдор Диспатчный, (Контроль версий, Git, SVN, Bazaar, Mercurial) 27-Янв-20, 18:11  [ | | | ] [линейный вид] [смотреть все]
Есть набор файлов, якобы точно соответствующий какой-то ревизии в Git.
Хочу определить какой именно ревизии соответствуют эти файлы.

Есть простой способ найти ревизию?

Сложный способ:
- посчитать контрольные суммы искомых файлов,
- делать checkout на все подряд ревизии,
- вычисляя контрольные суммы файлов в каждой ревизии,
- выбрать наилучшее совпадение с ревизией.

  • Нету простого способа Даже если ты посчитаешь хэш блоба, в базе данных ссылки о, !*! Мяу (?), 20:42 , 27-Янв-20 (1)
    > Есть набор файлов, якобы точно соответствующий какой-то ревизии в Git.
    > Хочу определить какой именно ревизии соответствуют эти файлы.
    > Есть простой способ найти ревизию?
    > Сложный способ:
    > - посчитать контрольные суммы искомых файлов,
    > - делать checkout на все подряд ревизии,
    > - вычисляя контрольные суммы файлов в каждой ревизии,
    > - выбрать наилучшее совпадение с ревизией.

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

    сообщить модератору +/ответить
Попытка реализовать собственный exec в userspace, !*! Павел Отредиез, (C/C++) 02-Янв-20, 20:36  [ | | | ] [линейный вид] [смотреть все]
Я га OpenBSD 6.6 64-bit
Есть простая программка hello:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
//    printf("%d\n", argc);
//    printf("Hello world!\n");
      return argc;
}

$ objdump -x hello | grep main
0000000000005680 g     F .text  0000000000000010 main


Надо вызвать ее из другой программы используя ручные методы:

#include <stdlib.h>
#include <stdio.h>
#include <err.h>
#include <errno.h>
#include <sys/mman.h>
#include "defines.h"
#include <fcntl.h>

void * RAM;

int main(int argc, char **argv)
{
    int i = open("disk/hello", O_RDWR);

    if (i == -1)
        errc(errno, errno, "Unable to open file\n");

    RAM = mmap(0, MEMORY_NPAGE * MEM_PAGE_SIZE,
    PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, i, 0);
    if (RAM == MAP_FAILED) errc(errno, errno, "Unable to map memory\n");

    printf("fd an allocated addres %d %lx\n", i, (long int)RAM);

    // _Jv_RegisterClasses symbol

    long unsigned int * _Jv_RegisterClasses =  RAM;

    *_Jv_RegisterClasses = (long unsigned int) RAM;


    int (*System)(int, char**) = RAM + 0x5680; //Symbol "T main"

    int j = System(10, argv);

    printf("Hello return %d\n", j);

    if (munmap(RAM, MEMORY_NPAGE * MEM_PAGE_SIZE) == -1)
        errc(errno, errno, "Unable to umap memory\n");


    return 0;
}

Родительская программа mmap'ит исполняемый файл и легко найти в дочерней int main и вызвать. Пока в int main не обращаются к данным, а содержатся только команды, все естественно выполняется. Как увидеть дочерней программе её сегмент данных. Что означает единственный символ в статическом hello "_Jv_Register_Classes".

Спасибо за любую помощь.

Не работает перевод до старта QApplication. Как обойти?, !*! xintrea, (GUI, XWindow, Qt, GTK) 20-Янв-20, 09:54  [ | | | ] [линейный вид] [смотреть все]
Перед тем, как будет стартовать объект QApplication (метод exec()), мне нужно подготовить определенные файлы, которые нужны для корректного старта, чтобы приложение могло их найти.

Подготовка файлов требует пользовательского выбора с вопросом "где разместить нужные файлы?". Соответственно нужно открыть окно, в котором будет интерфейс выбора. Окно такое есть, оно унаследовано от QDialog, оно работает даже до запуска основного приложения.

Но вот проблема: в этом окне есть код автоматического определения языка системы. И он работает, и он определяет язык, и устанавливает его приложению, и этот код запускается самым первым в конструкторе окна:


// Автоматическое определение языка системы
void InstallDialog::setupAutoLangTranslation()
{
    QString lang=QLocale().system().name().split('_').first().toLower();
    QStringList availableLang={"en", "ru"};

    if( !availableLang.contains(lang) )
    {
        lang="en";
    }

    qDebug() << "Auto detect lang in installator: " << lang;

    // Подключение перевода интерфейса
    QString langFileName=":/resource/translations/mytetra_"+lang+".qm";
    qDebug() << "Lang file: " << langFileName;

    QTranslator langTranslator;
    bool loadResult=langTranslator.load(langFileName);

    if(loadResult)
    {
        qDebug() << "Success load translation file";
        qApp->installTranslator(&langTranslator); // Транслятор устанавливается в объекте приложения
    }
    else
    {
        qDebug() << "Can't load translation file";
    }
}


Все установки строк в классе этого окна происходят _после_ данного кода. Естественно, все строки обернуты в tr(), сделаны lupdate, linguist, lrelease.

Однако перевода интерфейса не происходит.

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


void InstallDialog::onAccepted()
{
    if( !ui->m_radioButtonStandart->isChecked() and
        !ui->m_radioButtonPortable->isChecked() )
    {
        QMessageBox msgBox;
        msgBox.setText(tr("Please select one of install mode."));
        msgBox.exec();
    }
    else
    {
        this->accept();
    }
}

И в этом окне тоже перевод не работает.

Я сейчас грешу только на то, что перевод не работает из-за того, что объект приложения создан, но его основной цикл не запущен. А применение перевода сделано где-то в глубинах запуска основного цикла.

Вопрос в том, можно ли как-то выйти из этой проблемы, и заставить работать систему локализации Qt? Может быть, есть какой-то вызов, который обновит систему локализации без запуска основного цикла приложения? Или, может быть, есть какой-то другой метод?

Очень не хотелось бы в корне переделывать все приложение из-за такой вот особенности Qt.

Исходники: https://github.com/xintrea/mytetra_dev

Места в исходниках:

* /app/src/views/installDialog/InstallDialog.h
* /app/src/views/installDialog/InstallDialog.cpp
* /app/src/libraries/GlobalParameters.cpp, метод initWorkDirectory()
* /app/src/main.cpp, функция main(), вызов globalParameters.init();

Примечание: Чтобы появилось проблемное окно, не должно существовать директории ~/.config/mytetra


  • ля,не приходило на ум - что скорее всего система сигнал-слот не будет работа, !*! Аноним (1), 14:30 , 20-Янв-20 (1)
    > Перед тем, как будет стартовать объект QApplication (метод exec()), мне нужно подготовить
    > определенные файлы, которые нужны для корректного старта, чтобы приложение могло их
    > найти.

    ...
    *ля,
    не приходило на ум - что скорее всего система сигнал-слот не будет работать до запуска exec() ?

    >> Или, может быть, есть какой-то другой метод?

    Дффух - фазoвая инициализация ?
    Пример, ah( simple win-helper ), в конструкторе ph, вызов void init(); где происходит подготовка всех кишок аппы:

    int main(
    int argc,
    char *argv[])
    {

      int ret = 0;

      FMemWatcher memWatcher;

      FAppHelper ah;
      if (!ah.isOk()) {

        ret = -1;
        }

      // make copy because qt may change
      FArg arg(argc,argv);
      if (!arg.isOk()) {

        ret = -2;
        }

      if (0 == ret) {

        FGuiApplication app(argc, argv);
        FPluginHolder ph(arg, &memWatcher);

        if (ph.isOk()) {

          ret = app.exec();
          }
        else {

          ret = -3;
          }
        }

      memWatcher.Dump();

      return ret;

    };


    >Очень не хотелось бы в корне переделывать все приложение из-за такой вот особенности Qt.

    Имо, там перекроить вопрос 30-90 минут...

    P.S.:
    Вроде как еще на gamedev, не отметились.. :)

    сообщить модератору +/ответить
Книга о Шелле (Shell), !*! alexynior, (Shell скрипты) 05-Янв-20, 05:12  [ | | | ] [линейный вид] [смотреть все]
Какой лучший курс или книгу вы мне порекомендуете для изучения оболочки?
Brainfuck New Year, !*! pavlinux, (Языки программирования) 25-Дек-15, 02:26  [ | | | ] [линейный вид] [смотреть все]
Отформатировать STDIN в STDOUT, в виде Новогодней ёлки с тремя ярусами и ножкой.
Язык - любой: bash, C++, Java, Perl, awk, sed, python, tcl,...  

---


         v
        -X-
         A
        d$b
      .d\$$b.
    .d$i$$\$$b.
       d$$@b
      d\$$$ib
    .d$$$\$$$b
  .d$$@$$$$\$$ib.
      d$$i$$b
     d\$$$$@$b
  .d$@$$\$$$$$@b.
.d$$$$i$$$\$$$$$$b.
        ###
        ###
        ###



Нужна простая помощь в тестировании движка Key-Value (libmdbx), !*! erthink, (Разное) 12-Июл-19, 22:04  [ | | | ] [линейный вид] [смотреть все]
Прошу помочь в тестировании key-value движка MDBX. Хватит даже полудохлой (в разумных пределах) виртуалки с установленным компилятором C++, make и компрессором lz4 для логов.

Достаточно клонировать репозиторий и запустить «на выходные» скрипт, т.е. выполнить три команды:

git clone https://github.com/leo-yuriev/libmdbx
cd libmdbx
./test/long_stochastic.sh

ВАЖНО: будет почищен каталог /dev/shm !!! Поэтому, если у вас работает какой-нибудь postgresql, то его следует остановить. Как вариант - закомментировать в скрипте соответствующую строку.

Немного пояснений:
- тест стохастический «от легкого к тяжелому».
- тест работает в памяти, потому нагрузит memory bandwidth и CPU, но не диск.
- тест сам подстроится под размер ОЗУ.
- тест можно считать «бесконечным» и прервать/перезапустить когда он станет мешать.
- чем больше (суммарно) отработает тест, тем тщательнее будет проверка.

В случае сбоя нужно быть готовым предоставить инфу:
- «последний экран» вывода в терминал и lz4-файл из /dev/shm.
- минимальную информацию о системе (версию компилятора и т.п.)
- технически это лучше делать через заведение issue на github, а остальные варианты обсуждать здесь.

На всякий:
- комбинаторная сложность возможных состояний БД и последовательности операций такова, что примерно невозможно проверить все варианты.
- в такой ситуации стохастический тест (со случайным поведением) является разумным компромиссом.
- соответственно, «коллективное стохастическое тестирование» будет плюсом к собственным тестам (которые периодически прогоняются по нескольку сотен часов).

Всем добра.

  • Сколько денег за тесты , !*! universite (ok), 23:13 , 12-Июл-19 (1)
    > Прошу помочь в тестировании key-value движка MDBX. Хватит даже полудохлой (в разумных
    > пределах) виртуалки с установленным компилятором C++, make и компрессором lz4 для
    > логов.

    Сколько денег за тесты?

    сообщить модератору +/ответить
  • cc -O2 -g3 -Wall -Werror -Wextra -ffunction-sections -fPIC -fvisibility hidden -, !*! test (??), 08:05 , 13-Июл-19 (3)
    cc -O2 -g3 -Wall -Werror -Wextra -ffunction-sections -fPIC -fvisibility=hidden -D_GNU_SOURCE=1 -std=gnu11 -pthread -DNDEBUG=1 -DMDBX_DEBUG=0 -DLIBMDBX_EXPORTS=1 -I. tutorial/sample-mdbx.c ./libmdbx.so -o example
    rm -f /dev/shm/mdbx-test.db /dev/shm/mdbx-test.log && (set -o pipefail; ./mdbx_test --repeat=42 --pathname=/dev/shm/mdbx-test.db --dont-cleanup-after basic | tee -a /dev/shm/mdbx-test.log | tail -n 42) \
    && ./mdbx_chk -vvn /dev/shm/mdbx-test.db && ./mdbx_chk -vvn /dev/shm/mdbx-test.db-copy
    [ 11005 child_9.9  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 10999 child_3.3  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 11004 child_8.8  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 10998 child_2.2  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 10997 child_1.1  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 11000 child_4.4  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.026593_10994 main       info ] config-dump:     limits: readers 42, tables 42
    [ 190713-13:00:25.026598_10994 main       info ] config-dump:     drop table: No
    [ 190713-13:00:25.026602_10994 main       info ] config-dump:     ignore MDBX_MAP_FULL error: No
    [ 190713-13:00:25.026606_10994 main       info ] config-dump: #9, testcase append, space_id/table 9
    [ 190713-13:00:25.026612_10994 main       info ] config-dump:     log: level 3, console
    [ 190713-13:00:25.026616_10994 main       info ] config-dump:     database: /dev/shm/mdbx-test.db, size 268435456[-1..-1, -1 -1, -1]
    [ 190713-13:00:25.026622_10994 main       info ] config-dump:     mode: 0x7984000 = mapasync, nosubdir, writemap, nordahead, nomeminit, coalesce, lifo
    [ 190713-13:00:25.026629_10994 main       info ] config-dump:     table: 0x4 = data.dups
    [ 190713-13:00:25.026635_10994 main       info ] config-dump:     iterations/records 1000
    [ 190713-13:00:25.026639_10994 main       info ] config-dump:     repeat 42
    [ 190713-13:00:25.026644_10994 main       info ] config-dump:     threads 1
    [ 190713-13:00:25.026648_10994 main       info ] config-dump:     keygen.params: case random, width 32, mesh 32, rotate 3, offset 41, split 16/16
    [ 190713-13:00:25.026653_10994 main       info ] config-dump:     keygen.seed: 1
    [ 190713-13:00:25.026658_10994 main       info ] config-dump:     key: minlen 0, maxlen 990
    [ 190713-13:00:25.026662_10994 main       info ] config-dump:     data: minlen 0, maxlen 990
    [ 190713-13:00:25.026667_10994 main       info ] config-dump:     batch: read 42, write 42
    [ 190713-13:00:25.026671_10994 main       info ] config-dump:     no-delay
    [ 190713-13:00:25.026676_10994 main       info ] config-dump:     no-inject-writefault
    [ 190713-13:00:25.026680_10994 main       info ] config-dump:     limits: readers 42, tables 42
    [ 190713-13:00:25.026684_10994 main       info ] config-dump:     drop table: No
    [ 190713-13:00:25.026689_10994 main       info ] config-dump:     ignore MDBX_MAP_FULL error: No
    [ 190713-13:00:25.026693_10994 main       info ] config-dump: timeout: INFINITE
    [ 190713-13:00:25.026698_10994 main       info ] config-dump: cleanup: before Yes, after No
    [ 190713-13:00:25.026703_10994 main       info ] config-dump: failfast: Yes
    [ 190713-13:00:25.026707_10994 main       info ] config-dump: progress indicator: Yes
    [ 190713-13:00:25.043661_11005 child_9.9  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.043736_10999 child_3.3  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.044187_11004 child_8.8  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.045076_10998 child_2.2  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.045329_10997 child_1.1  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.045561_11000 child_4.4  fail ] mdbx_env_open() failed: Function not implemented (38)
    [ 190713-13:00:25.046074_10994 overlord   info ] actor #8, id 8, pid 11004: failed
    [ 190713-13:00:25.046319_10994 overlord   info ] actor #6, id 6, pid 11002: killed
    [ 190713-13:00:25.046535_10994 overlord   info ] actor #4, id 4, pid 11000: killed
    [ 190713-13:00:25.046728_10994 overlord   info ] actor #5, id 5, pid 11001: killed
    [ 190713-13:00:25.046935_10994 overlord   info ] actor #2, id 2, pid 10998: killed
    [ 190713-13:00:25.047155_10994 overlord   info ] actor #3, id 3, pid 10999: killed
    [ 190713-13:00:25.047561_10994 overlord   info ] actor #1, id 1, pid 10997: killed
    [ 190713-13:00:25.048007_10994 overlord   info ] actor #7, id 7, pid 11003: killed
    [ 190713-13:00:25.050584_10994 overlord   info ] actor #9, id 9, pid 11005: killed
    [ 190713-13:00:25.050633_10994 overlord   noti ] RESULT: Failed
    [ 190713-13:00:25.050641_10994 overlord   info ] skip cleanup
    make: *** [check] Ошибка 1

    сообщить модератору +/ответить
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру