The OpenNET Project / Index page

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



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Смещение контура матрицы. Алгоритм  (развлекательная задача), !*! dcc0, (PHP) 21-Фев-21, 16:21  [ | | | ] [линейный вид] [смотреть все]
Доброго!
Смотрел способы транспонирования матриц.
И возникла такая мысль: как минимальными средствами сдвинуть только контур (пусть будет квадтратной) матрицы. Например,  на  1 позицию, или последовательно на несколько позиций (в цикле).
Конутром матрицы считается:

1) Верхняя строка
2) Правый столбец  
3) Нижняя строка
4) Левый столбец
Относительно пользователя, глядящего в экран :)

Пока получился такой алгоритм: сохранить контур в отельном массиве - contour.
1) Циклически сдвинуть на 1 позицию  массив contour.
2) Переписать строки и столбцы в матрице.

Для матрицы размером 3*3, получается так:


<?php

        /*Циклическое смещение контура на единицу*/    
        
        
        /*Матрица*/            
        $matrix[0]=array( 1,1,1);
        $matrix[1]=array( 2,2,2);
        $matrix[2]=array( 3,3,3);
    
        /*Контур  матрицы */
        $contour=array(1,1,1,2,3,3,3,2);
    
    
    for ($j=0; $j < 8; $j++)
    
    
    {        
            
        /*Сдвигаем массив*/    
        $temp=array_pop($contour);
        array_unshift($contour, $temp);
        
        /*Смещение верхней и правой границы*/
        foreach ($matrix[0] as $k => $value)
        {
        $matrix[0][$k]=$contour[$k];    
        $matrix[$k][2]=$contour[$k+2];
        }
        
        /*Смещение нижней границы*/
        $x=3;
        for ($i=0; $i < 3; $i++)
        $matrix[2][--$x]=$contour[$i+4];
        
        /*Смещение левой границы*/
        $x=2;
        for ( $i=0; $i < 1; $i++)                 
        $matrix[--$x][0]=$contour[$i+7];
        
        
        /*Печатаем*/
        print '<br/>';
        print_r($matrix[0]);
        print '<br/>';
        print_r($matrix[1]);
        print '<br/>';
        print_r($matrix[2]);
        print '<br/>';
        print_r($matrix[3]);
        print '<br/>';
        print '<br/>';
        print '<br/>';
}
?>



  • Ух мать, это тебе в первый класс по каэс 50 Потом приходи с вопросом - объясню , !*! Аноним (-), 10:52 , 22-Фев-21 (1)
    > Доброго!

    Ух мать, это тебе в первый класс по каэс 50. Потом приходи с вопросом - объясню как оптимально.

    сообщить модератору +/ответить
Use undeclared indentifer в emit sig(), !*! Just friend, (GUI, XWindow, Qt, GTK) 20-Фев-21, 21:20  [ | | | ] [линейный вид] [смотреть все]
Qt 5.15
OS: Ubuntu 20.04


// foo.h
class Foo : public QObject {
    Q_OBJECT
public:
    explicit Foo();
    void init();
signals:
    void sig();
}

foo.cpp
Foo::Foo() : QObject(nullptr)
{
    ...
}

void init()
{
    ...
    emit sig();    //  Use undeclared indentifer 'sig'
}

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

Назначить сложную команду на yad button, !*! bicyclist56, (Shell скрипты) 10-Фев-21, 06:20  [ | | | ] [линейный вид] [смотреть все]
#! /bin/bash
# Есть работающий пример:
yad --center --borders=20 \
    --title="YAD Custom Dialog Buttons" \
    --button="Выполнить":"bash -c 'echo Yes!'" \
    --button="Exit"
# Задаю для простоты значения напрямую (на самом деле через форму yad):
HH=10
MM=30
TT="aplay /home/vvv/.local/share/sounds/timer.wav"
DD="03/10/21"
# Не создается at задача таким образом:
yad --center --borders=20 \
    --title="Запись задания" \
    --button="Выполнить":"echo $TT | at $HH:$MM $DD" \
    --button="Exit"
# И если в одну переменную:
CL="echo $TT | at $HH:$MM $DD"
# То тоже не работает:
yad --center --borders=20 \
    --title="Запись задания" \
    --button="Выполнить":"bash -c $CL" \
    --button="Exit"

Отдельной строкой успешно выполняется:
echo $TT | at $HH:$MM $DD

Вопрос: как правильно назначить эту команду на button="Выполнить"? Целый день игрался с разными кавычками, скобками и прочими спец.символами, сдался...

Что такое сети?, !*! Аноним, (Сеть, сокеты) 07-Фев-21, 18:41  [ | | | ] [линейный вид] [смотреть все]
Я только-только начинаю прогроммировать и услышал про **компьютерные сети**. В надежде понять что это такое я прочитал 200 страниц `ComputerNetworks-ATanenbaum-5thedition.pdf` и мне очень понравилось! Но я забросил дальнейшее чтение поскольку она нудновата, а у меня нет терпения.

Расскажите, пожалуйста, где можно почитать про компьютерные сети и так что б там было как их программировать и чтоб я играл с друзьями в мой тетрис!

Спасибо.

P.S. Стоит ли продолжать читать Таненбаума? Книга очень хорошая, но мною туго читается.

How to determine connection info (fd,uid,id) ?, !*! Аноним, (C/C++) 04-Фев-21, 10:06  [ | | | ] [линейный вид] [смотреть все]
По наитию использую libpcap, но с информативностью там сосвсем туго.
Можно ли не теряя удобства использования этой либы, получить хоть какую-то инфу о соединении и если можно то как ?
libtorrent скачивание фрагментов по требованию. Как сделать?, !*! rezedent12, (C/C++) 10-Сен-20, 12:28  [ | | | ] [линейный вид] [смотреть все]
Хочу сделать торрент клиент отдающий скачиваемые файлы через http. Но так что бы он скачивал только запрашиваемые части файлов. Но не только скачивал файлы, а ещё и раздавал загруженные фрагменты. Иначе я избрал бы использование btfs c nginx.
Почитал simple_client.cpp, загуглил то что можно сделать свой класс хранения. Осталось найти способ сделать выборочную загрузку частей файлов. Ну типа что бы можно было указать имя файла и с какого по какой байт его загрузить.
В самом C++ я разбираюсь плохо и мой уровень английского тоже низок. Интересует есть ли вообще такая возможность и как ей воспользоватся.
Как в Python 2.7.13 изменить INI-файл с субсекциями?, !*! xintrea, (Python) 22-Янв-21, 10:32  [ | | | ] [линейный вид] [смотреть все]
Имеется INI-файл с вот такой структурой:

...
[AC]
icon=battery-charging

[AC][DPMSControl]
idleTime=3600

[AC][HandleButtonEvents]
lidAction=64
powerButtonAction=8

[Battery]
icon=battery-060

[Battery][DPMSControl]
idleTime=300

[Battery][HandleButtonEvents]
lidAction=64
powerButtonAction=16

[LowBattery]
icon=battery-low

[LowBattery][BrightnessControl]
value=30

[LowBattery][HandleButtonEvents]
lidAction=64
powerButtonAction=16
...


Здесь видно, что HandleButtonEvents - это "субсекция", а основная секция задается перед субсекцией в той же строке. Не знаю, является ли это стандартом для INI-файлов или нет, не я этот файл создавал.

Задача - поменять значения powerButtonAction в различных субсукциях.

Пробовал достучаться до нужного значения так (хотя бы считать):


import ConfigParser
config=ConfigParser.ConfigParser()
config.read('$fileName')

print( config.get('AC][HandleButtonEvents', 'powerButtonAction' ) )


Но возникает ошибка:

      "Traceback (most recent call last):",
      "  File \"<stdin>\", line 5, in <module>",
      "  File \"/usr/lib/python2.7/ConfigParser.py\", line 607, in get",
      "    raise NoSectionError(section)",
      "ConfigParser.NoSectionError: No section: 'AC][HandleButtonEvents'"

Вопрос: как работать с такими файлами?

UPD: При необходимости могу поставить Python 3.5.3, если это будет нужно для решения.

  • AC AC DPMSControl AC HandleButtonEvents в чем проблема построить дерево, уч, !*! AnonymPatient (?), 11:47 , 22-Янв-21 (1)
    > Имеется INI-файл с вот такой структурой:
    >

    [AC]
    [AC][DPMSControl]
    [AC][HandleButtonEvents]
    в чем проблема построить дерево, учитывая тараканы разработчиков источникa/вeндорa/.. ?
    AC
    AC.DPMSControl
    AC.HandleButtonEvents

    > ...
    > Вопрос: как работать с такими файлами?

    Просто вручную - домалевать свой парсер на том же питоне.


    > UPD: При необходимости могу поставить Python 3.5.3, если это будет нужно для
    > решения.

    Tensorflow и прочий ИИ/ML здесь не поможет

    сообщить модератору +/ответить
процедура поиска сигналов и формирования кода завершения, !*! Bazik, (Shell скрипты) 06-Дек-20, 22:40  [ | | | ] [линейный вид] [смотреть все]
Уважаемые форумчане, добрый день!

Я новичок в направлении shell программирования и прошу помощи в написании shell-процедуры следующего типа:

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

Если можно, то с небольшими комментами, если не затруднит.

Буду рад любой помощи.

Спасибо!

Как в SED обработать диапазон строк?, !*! xintrea, (Shell скрипты) 22-Янв-21, 12:24  [ | | | ] [линейный вид] [смотреть все]
Есть такой текст:

...
[AC]
icon=battery-charging

[AC][DPMSControl]
idleTime=3600

[AC][HandleButtonEvents]
lidAction=64
powerButtonAction=8

[Battery]
icon=battery-060

[Battery][DPMSControl]
idleTime=300

[Battery][HandleButtonEvents]
lidAction=64
powerButtonAction=16

[LowBattery]
icon=battery-low

[LowBattery][BrightnessControl]
value=30

[LowBattery][HandleButtonEvents]
lidAction=64
powerButtonAction=16
...


Я хочу обработать диапазон строк между:

[AC][HandleButtonEvents]
...
[.*

В этом диапазоне надо изменить значение powerButtonActions.

Я пытаюсь сделать так:


cat f.txt | sed /\[AC\]\[HandleButtonEvents\]/,/\[.*/s/powerButtonAction\s*=\s*.*/powerButtonAction=125/

Но получаю ошибку:

> sed: -e выражение #1, символ 81: незавершенное адресное регулярное выражение

Вопрос: как правильно написать эту команду?

Посоветуйте что-нибудь быстрое иудобное для хранения пар текста, !*! Аноним, (Python) 15-Янв-21, 08:32  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте.

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

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

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

Спасибо.

sed теряет кавычки и не хочет  работать, !*! Аноним, (Shell скрипты) 30-Дек-20, 10:37  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте, подскажите, спасибо. GNU sed только -- остальные исполнение не поддерживают, по-моему. Типичное применение это скормить совпадения date.

echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo 1:"\1" 2:"\2" 3:"\3" 4:"\4"/e'

Нас интересует value2 и им мы будем оперировать, необходимо чтобы остальные сроки были переданы в скрипт без подобных модификаций навроде исчезающего содержимого. А то всё в кашу превращается.

  • Я перебрал наверное все известные мне варианты экранирования кавычек и нашёл в , !*! Аноним (1), 11:17 , 30-Дек-20 (1)
    Я перебрал наверное все известные мне варианты экранирования кавычек (и нашёл в поисковой системе некоторые странные). Ничего не получается.
    сообщить модератору +/ответить
  • чего получиться-то должно Или мы по каше должны догадаться предположу, что где-, !*! Аноним (2), 12:14 , 30-Дек-20 (2)
    > Нас интересует value2 и им мы будем оперировать
    > А то всё в кашу превращается.

    чего получиться-то должно? Или мы по каше должны догадаться?
    предположу, что где-то должно быть

    \([^"]*\)

    сообщить модератору +/ответить
  • Господа студиозусы, вы слегка достали Уже третий раз за месяц один и тот же воп, !*! ACCA (ok), 12:34 , 30-Дек-20 (5)
    Господа студиозусы, вы слегка достали. Уже третий раз за месяц один и тот же вопрос.

    У тебя стандартная задача разобрать хэш { key=value }. Ну так и разбирай его с помощью правильного инструмента. Исходный поток [чем-нибудь] преобразуешь в правильный JSON, потом разбираешь JSON:

    echo '{ "value1"="111", "value2"="222.ext", "value3"="333" }' | tr = : | jq .value2

    Надеюсь, ты догадаешься, как добавить недостающие запятые и кавычки, где нужно.


    сообщить модератору +/ответить
  • Вам данные value2 с содержимым в двойных кавычках нужно убрать, остальное о, !*! bagas (ok), 15:29 , 30-Дек-20 (13)
    > Здравствуйте, подскажите, спасибо. GNU sed только -- остальные исполнение не поддерживают,
    > по-моему. Типичное применение это скормить совпадения date.
    >
    echo 'value1="111" value2="222.ext" value3="333" otherdata' | sed -e 's/\(.*\)"\(.*\)\(\.ext\)"\(.*\)/echo 
    > 1:"\1" 2:"\2" 3:"\3" 4:"\4"/e'

    > Нас интересует value2 и им мы будем оперировать, необходимо чтобы остальные сроки
    > были переданы в скрипт без подобных модификаций навроде исчезающего содержимого. А
    > то всё в кашу превращается.

    Вам данные (value2="") с содержимым в двойных кавычках нужно убрать, остальное оставить?

    сообщить модератору +/ответить
  • Не уверен что правильно понял задачу, но возможно это как-то поможет code ech, !*! Аноним (29), 18:34 , 03-Янв-21 (29)
    Не уверен что правильно понял задачу, но возможно это как-то поможет:

    $ echo -e 'value1="111" value2="222.ext" value3="333" otherdata\nvalue1="1" value2="2" value3="3" otherdata' | sed -e 's/"/\\"/g;s/\(.*\)\\"\(.*\)\(\.ext\)\\"\(.*\)/echo \1\\"\2\3\\"\4/e;s/\\"/\"/g'

    value1="111" value2="222.ext" value3="333" otherdata
    value1="1" value2="2" value3="3" otherdata
    сообщить модератору +/ответить


sed/grep - заменить вхождение строки, !*! Аноним, (Shell скрипты) 29-Дек-20, 10:55  [ | | | ] [линейный вид] [смотреть все]
Добрый день. Мне нужно заменить все вхождения строки в файле, но только в тех случаях, когда некоторая последовательность в строке не найдена. Возможно ли это осуществить в sed, как будет выглядеть регулярное выражение? Спасибо.

Также я пытался подобрать подходящий паттерн для grep, тоже ничего не получилось. Мне нужны все совпадения строк, только если строка не включает в себя другую строку ("решено" цепочкой из 2 grep).

В общем-то, я озаботился из-за того, что это достаточно частая задача. И я не совсем понимаю, как её решить в sed.

Почему НЕ всегда срабатывает поиск подстроки?, !*! Владимир, (Perl) 11-Авг-20, 10:05  [ | | | ] [линейный вид] [смотреть все]
Написал скрипт по поиску дублирующих ссылок в двух htm файлах - берется ссылка из первого файла и ищется во втором эта найденная в первом.
Если не находится, то в результирующий файл записывается строка из первого файла из которой выделена искомая подстрока.
По задумке в выходном файле должны остаться только те строки из первого файла, которые содержат ссылки отсутствующие во втором файле.
На практике же результат получился частичный - да часть отсеивается, но есть повторяющиеся.
И я не могу понять почему это происходит. Я сравнивал эти оставшиеся строки с помощью текстового редактора (Far) - строки идентичны, а m// не находит их во втором файле.

Вот мой скрипт:
my $NameFile = shift @ARGV;
open (FH, "<$NameFile") or die ("Cannot open file \"$NameFile\"");
my @array=<FH>;
close FH;

$NameFile = shift @ARGV;
open (FH, "<$NameFile") or die ("Cannot open file \"$NameFile\"");
my @array2=<FH>;
close FH;

open (OUT, ">Test.tmp") or die ("Cannot open file Test.tmp");

my ($m,$n,$f)=0;
my $p;
foreach my $r (@array) {
  if($r=~/href="(.+?)"/)#ищем строку, содержащую ссылку
  {
    $m++;
    $p=$1;
    print "$p\n";
    $f=0;
    foreach (@array2)#ищем строку, содержащую ранее найденную ссылку
    {
      if(/$p/) {print "$_\n"; $f=1;}
    }
    if($f==0)#если нет дублирующих ссылок
    {
      print OUT $r;
      $n++;
    }
  }
}

close OUT;
print "\nВсего ссылок в первом файле = $m, из них отсутствующих во втором файле = $n";

Подскажите, пожалуйста, что я не так сделал.

Скрипты CI/CD - какие особенности лицензирования?, !*! And, (Разное) 11-Апр-20, 22:20  [ | | | ] [линейный вид] [смотреть все]
Не знаю, на какой форум приткнуть вопрос. )

Конфигурации, изображения, программный код лицензируются на разных условиях.

Конфигурации, например, в разбирательствах иной раз оказывались как нелицензируемое.

На изображения - Creative Commons.

А вот если есть комплект скриптов CI\CD и настроек, из которого рождается развесистая система сервисов. Этот комплект обозначить как лицензированный под лицензией для программного кода - ничтожное действие, или применимо?

Скрипты систем управления конфигурациями - это ведь типа программный код, своеобразный? Как лицензируется?

exec 7<&0 </dev/null 6>&1, !*! Аноним, (Shell скрипты) 29-Сен-20, 10:18  [ | | | ] [линейный вид] [смотреть все]

#!/bin/sh
...
exec 7<&0 </dev/null 6>&1
...

Не могу распарсить. Помогите.

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 или можно придумать что-нибудь ещё?

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

  • Как лучше сделать Загуглить решение, очевидно же Научиться гуглить и читать до, !*! Аноним (4), 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 казалось бы что ещ, !*! Аноним (1), 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 разных компиляторов с разными либами стоит, гента Можно любой си, !*! Аноним (1), 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 бота, то сообщения в чате дублируются

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

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



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

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