The OpenNET Project / Index page

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



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Найти строку в файле и удалить предыдущую перед ней, !*! XaKoN, (Shell скрипты) 12-Дек-16, 17:31  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Собственно сабж. Есть csv файл:

Comprehensive Order Report
«Order Type»,«Operating Unit»
«Standard - DIRECT A», «International Business Machines Corporation»
«Standard - DIRECT B», «International Business Machines Corporation»
«Standard - DIRECT C», «International Business Machines Corporation»
«Standard - DIRECT D», «International Business Machines Corporation»

Переодически в качестве первой строки в нём появляется строка Comprehensive Order Report. Необходимо удалить именно её, когда она есть в файле. «Order Type»,«Operating Unit» - название полей и всегда содержатся в файле т.е. можно опираться на них.

Пока вижу решение только двумя способами: 1) найти «Order Type»,«Operating Unit» и вывести их всё что дальше в файле до его конца.
2) найти «Order Type»,«Operating Unit» и удалить всё что выше.

Пробовал использовать sed для этих целей, но ничего не вышло.

Два дня ЛОР героически сражался с Rsync..., !*! chukcha, (Shell скрипты) 11-Дек-16, 00:49  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Понадобилось решить, казалось бы, очень простую задачу - осуществить резервное копирование с диска на диск,
исключив из него папки и файлы, лежащие ниже некоторых задаваемых папок.
Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.
Первым делом быстренько накидал свой вариант

rsync    -avpH      \
--exclude="home/chukcha/.cache/mozilla/firefox/*"                    \
--exclude="home/chukcha/.config/chromium/Default/*"                  \
--exclude="home/chukcha/.cache/moonchild productions/pale moon/*"    \
/home   /mnt/sdc1/

Но я очень плохо разбираюсь в премудростях синтаксиса Rsync, поэтому не удивительно, что он не заработал.
Тогда обратился за помощью к легендарному ЛОРУ - https://www.linux.org.ru/forum/general/13066819

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


PS. Маленькая просьба: только пожалуйста, не надо меня учить "как делать", как это пытались делать лоровцы, а просто приведите рабочий скрипт.
Хотя я понимаю, что учить и тыкать в маны гораздо легче, но когда доходит до конкретики, так все разбегаются в разные стороны.




Рисование в Ubuntu (Qt, OpenCV), !*! Алексей, (Библиотеки, функции) 09-Дек-16, 19:14  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Доброго времени суток!

У меня, как выяснилось, весьма нетривиальная задача. Нужно под Ubuntu 14 написать приложение, которое автоматически создает графический файл (коллаж), включающий в себя фотографии и текстовые подписи. Сам коллаж я вполне успешно делаю на OpenCV. Но здесь встают следующие ограничения:
- надписи должны быть на русском языке;
- приложение должно быть консольным (должно работать без "иксов" в виде демона и запускаться через init.d).

Проблема началась тогда, когда обнаружилось, что OpenCV (как это ни странно) не дружит с UTF8, а следовательно, и с русским языком. Эту ветку развития пришлось забросить.

Тогда я пошел в обход, сделал проект в Qt5 и воспользовался классами QImage и QPainter, потом скопировал полученное изображение в матрицу OpenCV (благо, Qt с русским языком дружит). Но здесь не вышло с запуском приложения в виде демона: QPainter при запуске из-под консоли (класс QApplication был заменен на QCoreApplication) выдает ошибку сегментирования.

Когда не вышло здесь, я вернул QApplication на место и попробовал запустить своё приложение с ключом -platform offscreen, что исключило все вылеты программы, но возникла проблема со шрифтами: при старте приложения выдавалась ошибка QFontDatabase: Cannot find font directory, и приложение снова вываливалось с ошибкой сегментирования.

Тогда я установил переменную окружения QT_QPA_FONTDIR=/usr/share/fonts. Ошибка перестала возникать, но вместо русских символов на коллаже стали отображаться пустые квадратики.

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

UPD: попробовал альтернативу - библиотеку CImg, но, как выяснилось, с русским языком не дружит и она...

строка в обратном порядке без sed и awk, !*! grizzlynet, (Shell скрипты) 05-Дек-16, 09:27  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет! Есть у кого варианты вывода echo "10:9:8:7:6:5:4:3:2:1" > file, без использования sed и awk, в обратно порядке. Результат 1:2:3:4:5:6:7:8:9:10 ?


вставить перевод  строки через каждые 5 слов, !*! Badaboom, (Shell скрипты) 25-Ноя-16, 15:25  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
всем привет
пишу скрипт отслеживающий превышение очереди на выход почтового сервера
OUT=exim -bp| exiqsumm
в $OUT весь выхлоп в одну строку
если слать алерт по почте, плохо читаемо.
собственно вопрос: как вставить с помощью sed или awk в строку перевод строки каждые пять слов (в общем случае символы ограниченные пробелами)?
если есть варианты получше отлова превышения порога, буду рад любому совету.


C Перенаправить файл в дочерний процесс обработать tail и, !*! mesmeridze, (C/C++) 15-Ноя-16, 08:35  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день коллеги.
Поставили такую задачу. Нужно из родительского в дочерний процесс передать некий файл, там его пропустить чере more / head / tail кому что нравится. Затем полученный вывод вернуть родителю ну и родитель собственно должен этот текст вывести на экран.
(институтская задача не бейте тапками)

Если я правильно понял использовать нужно fork, в родителе файл можно открыть при помощи fopen и передать дескриптор дочернему процессу. Поскольку как я читал дескриптор будет доступен последнему, то остаётся решить вопрос как это вот всё скормить перечисленным утилитам, а потом весь этот вывод вернуть родителю. Я могу это сделать через system, но чует моё сердце есть не рагульский вариант.

Подскажите пожалуйста как правильно это сделали Вы.
Спасибо

Проблема с регулярными выражениями в bash-скрипте, !*! drew53, (Shell скрипты) 13-Ноя-16, 20:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте, гуру!
Прошу сильно не пинать, так как, можно сказать, только начал изучать bash-scripting, а регулярные выражения для меня -- так это просто творение сотоны и язык не этой планеты...)))))

Пытаюсь решить простую (как мне казалось) задачку: есть переменная, содержащая строчные буквы, завершаемые цифрами на конце. Все без пробелов, например, blabla123. Нужно получить порядковый номер blabl'ы, то есть цифровой хвост.

Бьюсь полдня, ничего не понимаю((( Вобщем, объясните, пожалуйста, кто-нибудь: следующий код дает вот какие результаты.


stringZ=abcABC123ABCabc
echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`

stringZ=blabla12
echo `expr match "$stringZ" '\([a-z]\)'`
echo `expr match "$stringZ" '\([a-z]\+\)'`
echo `expr match "$stringZ" '\([0-9]\)'`
echo `expr match "$stringZ" '\([0-9]\+\)'`

Результат работы скрипта:
abcABC1
b
blabla
<пустая строка>
<пустая строка>

То есть, шаблон [0-9] в первом примере (честно слизанном с Вашего портала =) находит цифры в строке. Шаблон [a-z] в моем случае также работает верно, и даже [a-z]+. А вот ни[0-9], ни [0-9]+ в моем случае цифирь не видит "наглухо"(((((

Я понимаю, конечно, что ошибка в ДНК))), но в какое место скрипта она реплицировалась??? Всю голову сломал((( Выручайте?!
Заранее благодарю!

Работа со строками Bash, !*! kampaiification, (Shell скрипты) 20-Окт-16, 23:39  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Дорогие форумчане, возникла резкая необходимость. В этих делах не в зуб ногой.

Файл с содержимым показывает вызов функции mail() в определённом файле:

user1 (mail) (dsbsmo4@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user3 (mail) (jfen835@list.ru) /home/user3/data/www/admin/system/cxmxmc.php
user3 (site) /home/user3/data/www/site.ru/index.php
user2 (mail) (hrj34fucr@list.ru) /home/user2/data/www/fake/root.php
user1 (mail) (r834fnjv@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user2 (site) /home/user1/data/www/order.ru/index.php
user2 (mail) (segkfwmkf@list.ru) /home/user1/data/www/sfmve/dskjfs/.404.php
user2 (mail) (dsfsdsd@list.ru) /home/user1/data/www/fdgkgd/43fmke.php
user2 (site) /home/user1/data/www/fiction/index.php
user1 (mail) (ewriwr43n@list.ru) /home/user1/data/www/site/assets/owl.php
user1 (mail) (sdmn348934@list.ru) /home/user1/data/www/mail/postform.php
user1 (mail) (pweneife@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php

Посчитать количество раз вызова функции mail() в файле для всех пользователей.

Вывести только:
count USER PATH
(взять за «ключ» «USER PATH»)

Например:
3 user1 /home/user1/data/www/wp-config/erwkcwkcw.php

Старый порт uShare для FreeBSD, !*! stainlessrat, (Компиляция) 07-Окт-16, 21:44  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Был во FreeBSD 9.X такой порт net/ushare - (очень) легковесный UPNP/DLNA сервер (требует только libupnp, iconv - в общем самый минимум). Для простой раздачи по этому протоколу - мечта :) Начиная с FB 10.0 этот порт "выпилили" из-за смены системы портов и отсутствия поддержки разработчика. Вот решил как-то реанимировать этот порт, тем более, что сайт по прежнему доступен, а у меня есть видео для раздачи по этому протоколу...
Инструкция по установке:
1. скачиваем архив
http://my-files.ru/rwax2v
в этом архиве исходники порта и сами исходники программы (чуть дополненные одной директивой extern (ushare.h и trace.h))
2. архив (без распаковки) ushare-1.1a.tar.bz2 копируем в /usr/ports/distfiles
3. архив ushare.tar.bz2 распаковываем в /usr/ports/net/
4. переходим в каталог "cd /usr/ports/net/ushare"
5. "make install clean"
Ну а дальше как с простым демоном в rc.conf 'ushare_enable="YES"', редактируем /usr/local/etc/ushare.conf и запускаем :)

P.S. Прошу дать замечания по модификации порта и изменению исходников :)

какой применить алгоритм?!, !*! вотак, (Разное) 07-Окт-16, 09:40  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Делаю логическую игру, у меня есть некоторое множество двухзначных цифр.
Мне нужно выделить из этого множества максимальное количество возможных сочетаний.
Сочетания фиксированы, вот такие:
1. пара = ХХ, ХХ (в множестве есть две одинаковые цифры 11, 11)
2. тройка = ХХ, ХХ, ХХ
3. четверка = ХХ, ХХ, ХХ, ХХ
4. тройная последовательность = ХХ, ХХ + 1, ХХ + 2 (три цифры например 22, 23, 24)

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

вот похожее но не то
http://www.aconnect.de/friends/editions/computer/combinatori...

centos iopl(3) Operation not permitted, !*! serge, (C/C++) 03-Окт-16, 20:46  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Пытаюсь прочитать содежимое cmos.
На fedora и ubuntu ok.
На centos7 - вызовы iopl(3) и ioperm(...) приводят к "Operation not permitted"
CAPS_SYS_RAWIO не помогает.

Подскажите, ЧЯДНТ?

Или пользовать /dev/ports ?

bash-скриптинг, !*! Hogward, (Shell скрипты) 30-Сен-16, 14:23  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Входная информация:
Есть каталог (пример) /home/usr/var/ в котором лежит 300 файлов. Периодически возникает необходимость обновлять эти файлы, создав бэкапы старых. Хочу автоматизировать сей нудный процесс до нажатия одной кнопки. Таким образом у меня есть список файлов list.txt в котором указаны интересующие меня файлы (количество любое, файл заполняется через ls). На основании этого файла хочу выбрать существующие файлы из /home/usr/var/, скопировать их в /home/usr/var_old/, после чего подменить на новые. Перерыл кучу информации, нашел несколько работающих вариантов в случаях, когда есть полный путь до файлов, но так и не понял, как написать запрос поиска файлов на основании их имен в текстовом документе. Поиск осуществляется именно через текстовый документ, т.к. он формируется на удаленном сервере, после чего доставляется на необходимый.
PS из плюсов - все файлы имеют вид "document"; "item" и пр. Без пробелов, спецсимволов и расширений.

Копирование файлов планирую осуществлять вот таким образом:
cat /home/usr/var/to_backup.txt | xargs -IFILE cp FILE  /home/usr/var_old/
где to_backup.txt - файл, созданный на основе list.txt, но с полными путями до файлов.

Почти уверен, что проблему можно решить обычным find-ом, но не хватает скила правильно это сделать.

Как непросто учится СИ, !*! dcc0, (C/C++) 17-Сен-16, 15:38  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
У меня почти весь ушёл на одну мизерную программу, чтобы написать без ошибок и то сомневаюсь.
Ищет символ в строке. Большего ничего не делает:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char * str=argv[2];
    char * patrn=argv[1];
            
             if (argc < 2) {
             printf("Enter a symbol and string\n");
             return 0;
           }
             if (patrn[1] !='\0') {
             printf("Enter just one symbol\n");
             return 0;
           }
            if (argc < 3 ) {
             printf("Enter pattern and string\n");
             return 0;
           }
             if (argc > 3 ) {
             printf("Use double \" \" quotes for strings containing spaces\n");
             return 0;
           }
            
             int j =0;
             while (str[j] != 0) {
                  if (patrn[0] == str[j]) {
                  printf("Found: %c in position %d", str[j], j);
                  break;
                  return 1;            
                  }            
                  ++j;
             }
            
             return 0;        
}



си system и переменные, !*! dcc0, (C/C++) 17-Сен-16, 10:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Я, наверное, надоел уже вам тут.
У меня еще два вопроса.
Верно ли я понимаю, что в Си при вызове system невозможно передать переменную?
Нашёл такой фокус со sprintf, но, как я понял, - это уже функция с++.

Второй вопрос: в php system возвращает  результат работы и с этим результатом возможно работать как с переменной.
Я так понимаю, что такой фокус не пройдет в Си.
Или я ошибаюсь?
Благодарен вам заранее за выдержку и терпение, отсутствие ехидства над новичком.

Нормальный ли код получился? (Переворот строки Си)., !*! dcc0, (C/C++) 14-Сен-16, 20:10  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Тренировался, нужно было написать функцию переворачивания строки, strrev не хотелось использовать. Нету ли ничего шибко крамольного в коде?

#include <stdio.h>
const char *prnt(int k, char *a) {
char  new_s[k]={0};
int i=0;
    while(k !=0 ) {
     k--;
        new_s[i]=a[k];
     ++i;

    }
    printf("%s", new_s);
        return (new_s);
}

main (int argc, char *argv[]) {
char *a=argv[1];
    if(argv[1]==0) {
        return 0;
    }
    int k=0;
    while (a[k] != 0) {
k++;    
    }
    prnt( k, a);
}



Printf цикл отступ, !*! dcc0, (C/C++) 13-Сен-16, 13:09  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
В чистом Си как-то можно динамически изменять отступ в цикле при выводе на экран через printf?
Допустим:
int a = 1;
a++;
while (a < 10) {
printf("d");
}
Вместо 12 как-то можно подставить переменную а?


Мой маленький OpenSpurce проект, !*! dcc0, (PHP) 06-Сен-16, 16:27  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Хотел бы  анонсировать.
https://sourceforge.net/projects/easyvideocat/
Программа для вырезки фрагментов из видео с открытым исх. кодом. Правда, для Windows 32/64
Фактически - это обёртка для  ffmpeg, написанная на PHP (GUI).

Как реализвать substr в си?, !*! dcc0, (C/C++) 03-Сен-16, 01:54  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
нужен аналог для string.h в с
который есть в php
такой
$rest = substr("abcdef", 1);    
и такой
$rest = substr("abcdef",0, 1);  
Скрипт примонтирования, !*! Wellberg, (Shell скрипты) 18-Авг-16, 13:43  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужен скрипт для проверки примонтирована директрория или нет.
Если нет, то примонтировать.
В качестве проверки

#!/bin/bash
dir_name="/mnt/backup"
if [ `mount | grep "$dir_name"` ]; then
echo "OK"
else
echo "Alarm!!! The directory $dir_name is not mounted!"
fi
Подскажите что не так, проверяю mount|grep /mnt/backup показывает что директория примонтирована,
запускаю скрипт,пишет что не примонтирована.
И вторая часть,
umount /mnt/backup/
cd /mnt/backup/
rm -r /mnt/backup/*
mount -a

И как связать первую часть со второй? То есть если директория не отмонтировалась, то запускалась бы вторая часть.
Скрипты для себя открыл только сегодня, заранее благодарен вашей помощи.

Bash vs Dash - подстановка управляющих символов, !*! AlAdin, (Shell скрипты) 14-Авг-16, 07:20  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Надо найти в файле первую пустую строку (получить смещение байта). Файл является частью HTML-формы и пустая строка, кроме \n содержит ещё и \r. В общем, надо найти строку типа '^\r$'.

В bash-е команда
grep -bxm1 $'\r'
работает как ожидается.

В dash-е пишу
grep -bxm1 '\r'
ошибок не выдаёт, но и результата нет. Хотя если искать какой-то "реальный символ", то выдаёт предсказуемое значение.

Как подставить управляющий символ?

Спасибо

Подскажите инструменты для парсинга таблицы, !*! unixman, (Shell скрипты) 10-Авг-16, 12:05  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Приветствую!
Нужна помощь/совет/направление в решении задачи.

Дано: Таблица (текстовый файл разделенный табами): Столбцы  A, B,  C содержащие разные данные и текстовый файл (шаблон)

Задача:
Произвести подстановку значений (помеченных как A B C)  в текстовом файле согласно значениям   файла таблицы  и сгенерировать для каждой пройденной строки (строки из табличного файла) текстовый файл.
Нужно чтобы скрипт каким-то образом читал каждую строку из табличного файла, и эти уникальные значения были переданы sed (видимо как аргументы или переменные) для подстановки в текстовом шаблоне и по окончании сохранив отдельным файлом. Таким образом сгенерировав множество текстовых файлов.
По шагам я понимаю, что я хочу сделать, но вот  как представить в скрипте данные из табличного файла, как ими оперировать не  понимаю?  В каком виде они должны быть, как переменные или массив или нечто другое?

P.S. Не бросайте камни, я не программист, с bash в общих чертах знаком (с базовым синтаксисом), но никогда не писал скрипты.
Буду благодарен за отклик.

Прекращение цикла, !*! Ordu, (Shell скрипты) 02-Авг-16, 15:17  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Ниже однострочник, чья идея в том, чтобы взять два случайных файла из текущей директории, и скопировать их в другое место, параллельно перекодировав им звук. Вообще он мне нужен, чтобы закинуть на планшет и посмотреть в ванной пару случайных серий любимого сериала. При этом планшет не дружит с той звуковой дорожкой, которая есть, поэтому я перекодирую в mp3. Ну и естественно хотелось бы перекодировать и копировать параллельно, для экономии времени. Здесь в команде в качестве цели указана ./tmp/, но это просто я устранял возможные источники влияния.

Собственно, проблема в том, что он только один файл "копирует" -- первый.

ls *.mkv | shuf | head -n 2 | sort | (i=1; while read line; do ffmpeg -i "$line" -c:v copy -c:a mp3 tmp/$((i++)).mkv; done )

Если заменить ffmpeg на echo ffmpeg то он две строчки. Если всю команду в теле цикла на cp "$line" tmp/$((i++)).mkv, то тоже всё срабатывает как я ожидаю -- два случайных файла копируются с переименованием в 0.mkv, 1.mkv. Но если ffmpeg, то только один. Чтоза?

Работа с сирийным портом (Linux/Kernel/LKM), !*! Oxff, (Процессы, Треды, RPC) 17-Июл-16, 03:35  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Приветствую!
Имеется исходник модуля ядра под Линукс, требуется из него работать с серийным портом.
Немного прошарил тему, сколько удалось понять, что по простому работать с виртуальным терминалом ttyS можно только из под юзер спейс.
В теории можно собрать свой низкоуровневый драйвер, но это сложновато для моего уровня знаний.
Какие варианты решения посоветуете?
Добавление версии для цели(target), !*! palcemvnebo, (Компиляция) 04-Июл-16, 09:50  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте, пытаюсь через CMAKE добавить версию для target следующим способом, но не получается:
set(VR_VERSION_MAJOR 1)
set(VR_VERSION_MINOR 2)
set(VR_VERSION_PATCH 3)
set(VR_VERSION ${VR_VERSION_MAJOR}.${VR_VERSION_MINOR}.${VR_VERSION_PATCH} )
set_target_properties(VR PROPERTIES VERSION ${VR_VERSION}
                        SOVERSION ${VR_VERSION_MAJOR} )

Вот полный вариант кода, может не туда вставляю,вообщем обшарил весь инет, не могу разобраться, подскажите, где неправ!
if(NOT USE_QT5)
    QT4_WRAP_UI(UISrcs editor.ui connection_options.ui mainwindowview.ui)
else()
    QT5_WRAP_UI(UISrcs editor.ui connection_options.ui mainwindowview.ui)
endif()

find_path(PROPERTY_WIDGET_INCLUDE_DIR PropertyWidget.h PATH_SUFFIXES include/QtnProperty/PropertyWidget)
if(WIN32)
    find_file(PROPERTY_WIDGET_LIBRARY QtnPropertyWidget.lib PATH_SUFFIXES lib)
else()
    find_file(PROPERTY_WIDGET_LIBRARY NAMES QtnPropertyWidget PATH_SUFFIXES lib bin)
endif()


find_path(PROPERTY_CORE_INCLUDE_DIR PropertyCore.h PATH_SUFFIXES include/QtnProperty/Core)
if(WIN32)
    find_file(PROPERTY_CORE_LIBRARY QtnPropertyCore.lib PATH_SUFFIXES lib)
else()
    find_file(PROPERTY_CORE_LIBRARY NAMES QtnPropertyCore PATH_SUFFIXES lib bin)
endif()

include_directories(${PROPERTY_WIDGET_INCLUDE_DIR})
include_directories(${PROPERTY_CORE_INCLUDE_DIR})

add_executable(VR
    ${UISrcs}
    main.cpp
)
    
if(WIN32)
set(ADDITIONAL_LIBS Rpcrt4.lib)
else()
set(ADDITIONAL_LIBS "")
endif()    
target_link_libraries(VR
    ${ADDITIONAL_LIBS}
    ${qt_libs}
    ${PROPERTY_WIDGET_LIBRARY}
    ${PROPERTY_CORE_LIBRARY}
    ${OPENSCENEGRAPH_LIBRARIES}
    ${OPENGL_LIBRARIES}
)
set(VR_VERSION_MAJOR 1)
set(VR_VERSION_MINOR 2)
set(VR_VERSION_PATCH 3)
set(VR_VERSION ${VR_VERSION_MAJOR}.${VR_VERSION_MINOR}.${VR_VERSION_PATCH} )
set_target_properties(VR PROPERTIES VERSION ${VR_VERSION}
                        SOVERSION ${VR_VERSION_MAJOR} )

install(TARGETS VR
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION bin
    ARCHIVE DESTINATION lib)


p.s. цифры в кавычки убирал, результат такой же
Словарь ..., !*! Andrey_redd, (C/C++) 19-Июн-16, 22:45  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Где найти словарь русских слов, ну не знаю в тексте или в базе например SQL,
нужны просто слова русского языка желательно все ...
v4l2 cuda ускорение копирования кадра в память GPU, !*! vsw, (C/C++) 19-Июн-16, 16:13  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет,

Пишу код на Ubuntu 14, Tegra 3, камера с разрешением 4224x3156, yuv422, 26Мб. Забираю кадр каждые 70мс, далее memcpy в pinned memory host, cudaMemcpy из pinned host в divice memory и далее обработка в GPU.

Memcpy занимает 200мс. Это больше чем частота кадров. Как можно ускорить загрузку буфера кадра в память GPU?

Можно ли использовать v4l2 IO_METHOD_USERPTR в качестве pinned memory, что бы не тратить время на memcpy.

С уважением Виктор.



Низкая производительность из libpq, !*! koteg, (PostgreSQL) 08-Июн-16, 14:12  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем читающим это сообщение доброго времени суток.

Возник вопрос с производительностью сервера Postgres 9.5 при работе через libpq из приложения, написанного на С.

Тестировался вызов (10000 раз) хранимой ф-ции из скрипта PGSQL и из приложения. Результаты:

Скрипт: 503 msec. (19880.71570 операций вставки в секунду)
Приложение: 71.241997 sec. (140.36664 операций вставки в секунду)

Разница в 141.63418 раз!!!111

    В чём может быть проблема такой деградации?

Описание системы:

$ uname -a
Linux localhost.dev.resolute.ru 3.9.4 #3 SMP Tue May 28 14:26:24 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

$ /usr/web/bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.5.3

Вызываемая процедура:

create or replace function test_job(
    in    v_i_id        int8,
    out    v_o_id        int8
)
as
$$
begin
    select n into v_o_id from test_t where n = 100;
    insert into test_t(n) values (v_i_id);
end;
$$ language plpgsql

Тестовый скрипт:

do
$$
declare v_o_res int8;
begin
    for i in 1..10000 loop
        select test_job(i::int8) into v_o_res;
    end loop;
end;
$$

Код приложения (С)

#include <stdio.h>
#include <libpq-fe.h>
#include <sys/time.h>

#define uint64_t unsigned long long

uint64_t htonll(uint64_t host_longlong) {
    int x = 1;
    if(*(char *)&x == 1)
        return ((((uint64_t)htonl(host_longlong)) << 32) + htonl(host_longlong >> 32));
    else
        return host_longlong;
}

int main() {
    PGconn            *conn;
    const char        *keywords[7] = {"host", "port", "dbname", "user", "password", "client_encoding", NULL};
    const char        *values[7] = {"/usr/web/run", "5434", "_login", "_schema", "_passwd", "UTF8", NULL};
    int                rowCount, colCount, i, j;
    PGresult        *res;
    ExecStatusType    status;
    struct timeval    tv;

    conn = PQconnectdbParams(keywords, values, 0);
    if (PQstatus(conn) == CONNECTION_BAD) {
        printf("Не удается подключиться к базе данных\n%s\n", PQerrorMessage(conn));
        return 1;
    }

    gettimeofday(&tv, NULL);
    long long t = tv.tv_sec*1000000 + tv.tv_usec;
    const char        *paramValues[1];
    int paramLengths[1];
    int paramBinary[1];
    for(i=0; i<10000; i++) {
        long long id = htonll(i);
        paramValues[0] = (char*)&id;
        paramLengths[0] = 8;
        paramBinary[0] = 1;
        res = PQexecParams(conn,
            "select test_job($1::int8)",
            1,                // кол-во параметров
            NULL,            // backend узнает тип параметров из текста запроса
            paramValues,
            paramLengths,
            paramBinary,
            0                // результат вернуть как текст
        );
        status = PQresultStatus(res);
        if((status != PGRES_COMMAND_OK)&&(status != PGRES_TUPLES_OK)) {
            printf("ERROR: %s\n", PQresultErrorMessage(res));
            PQclear(res);
            return 0;
        }
        //printf("%s\n", PQgetvalue(res, 0, 0));
    }
    gettimeofday(&tv, NULL);
    t = (long long)(tv.tv_sec*1000000 + tv.tv_usec) - t;
    printf("\ntime: %f sec\n", ((float)t)/1000000);

    PQclear(res);
    PQfinish(conn);
    return 0;
}


DBI постоянное соединение, !*! krpsh, (Perl) 05-Июн-16, 17:09  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте!

есть код из скрипта, который один раз в 5 секунд вставляет строку в базу
база находится на другом конце openvpn туннеля

my $dbh = DBI->connect("dbi:Pg:dbname=db_exp;host=192.168.170.1;port=5432",
                "exp", "111",
                {AutoCommit => 0, RaiseError => 0, PrintError => 0, pg_enable_utf8 => 1, ShowErrorStatement => 1, InactiveDestroy => 1});
my $query = qq/INSERT INTO proba_connector (id, name, is_del) VALUES (?,?,?)/;
my $sth = $dbh->prepare($query);
while (1) {
    my $rv = $sth->execute(22, 'test', 1);
    print "sleep 5\n";
    sleep 5;
}

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

после восстановления туннеля, скрипт "оживает" и продолжает свою работу.
У DBI есть метод ping, который как раз и предназначен решать эту проблему
и он прекрасно работает если базу просто остановить, но вот он не работает если
рвется связь, т.к. скрипт "замирает"
ps: того же эффекта можно добиться при помощи iptables, если закрыть порт 5432 на входящий коннект

Исключения, !*! Alex, (C/C++) 03-Июн-16, 16:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
есть программа, ставлю отлов исключений:

while(i--) {
try {
...
}
}

копиkлирую gcc получаю ошибку:

rm -f test *.o
gcc -c test.c
test.c: In function ‘main’:
test.c:118:3: error: ‘try’ undeclared (first use in this function)
test.c:118:3: note: each undeclared identifier is reported only once for each function it appears in
test.c:119:3: error: expected ‘;’ before ‘{’ token
make: *** [test.o] Ошибка 1

а как ее объявить?

Ошибка сегментирования, !*! Alex, (C/C++) 25-Май-16, 09:10  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Си
    #include <mysql/mysql.h>
    #include <stdio.h>
    #include <stdlib.h>

main() {
      MYSQL *conn;
      MYSQL_RES *res;
      MYSQL_ROW row;
  ..
  if (mysql_query(conn, "INSERT INTO ....
  ..

  res = mysql_use_result(conn);
  while ((row = mysql_fetch_row(res)) != NULL) // здесь получаю ошибку сегментирования
  ...
}

почему?

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



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

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