The OpenNET Project
 
Поиск (теги):    НОВОСТИ (+) КОНТЕНТ WIKI MAN'ы ФОРУМ twitter

форумы  помощь  поиск  регистрация  майллист  вход  слежка  RSS
Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | |  
Форум Программирование под UNIX
Сломай голову в shell, Александр, (Shell скрипты) 25-Мрт-15, 14:52  [ | | ] [линейный вид] [смотреть все]
Добрый день! Весь отдел сломал голову. Есть файл:

home@home$ cat list
a
s
v
d
s
c
a

Переменные a и s заранее определены. Как перебирая файл циклом for, печатать не имя переменной, а её значение.

home@home$ a=45; s=32; for i in `cat list` ; do echo $i; done

s
v
d
s
c
a

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

Qt  (gui) - не приходит(ят) сигнал(ы), fail, (GUI, XWindow, Qt, GTK) 24-Мрт-15, 09:00  [ | | ] [линейный вид] [смотреть все]
Ситуация,
есть проект и в нем некий виджет:

- на Qt3 унаследованный от QListView
  (emit custom-ного mouseClick() сигнала и обработка  в слоте)
- на Qt 4,5 унаследованный от QTreeWidget
  (в кострукторе connect к стандартному сигналу itemClicked() и обработка  в слоте)

В проекте заглушке(тестовом для этого виджета) все нужные сигналы испускаются и слоты выполняются.

В проекте заглушке(тестовом для разрабатываемого функционала),
этот( *ять, *ть, *ь...) сигнал виджета не приходит.

- дакталоскопия логов и исходников на предмет некорректного connect`a, несовпадения сигнатур и т.д. нифига не принесла
- маневры с setCentralWidget() или виджет в качестве отдельного окна - тоже самое
- никаких installEventFiler() и eventFilter() - в проектах заглушках не используется

Из морально - спортивных соображений -  пока не пускался в ход eventFilter()

Вопросы к конструктивной общественности и местным астрологам:
- кто сталкивался с подобным(не получением сигнала) и/или куда копать ?
- возможно, связано ли это с порядком {include <>, "" } в пятом доме


И все это безобразие творится на штатных:
Qt 5(ubuntu 14.04)
Qt 4(debian 6, freebsd 10)
Qt 3(debian 5)

COM-порт + MySQL + сетевой демон, yurybx, (Разное) 19-Мрт-15, 10:26  [ | | ] [линейный вид] [смотреть все]
Сразу оговорюсь, что мой опыт "программирования" под *nix-системы ограничивается написанием скриптов на bash. Поэтому обращаюсь к спецам за помощью в определении направления: какую документацию читать, по каким языкам, механизмам и т.д. Какой путь выбрать.
Задача следующая. Имеется офисная АТС, передающая лог звонков по COM-порту, и сервер на FreeBSD 8.0. Нужно решить две задачи:
1. Сервер должен принимать лог от АТС и расфасовывать его в базу данных MySQL (оная уже работает на сервере)
2. Сервер должен мгновенно отправлять информацию о поступившем звонке на рабочую станцию Windows по сети (чтобы секретарша видела кто звонит на экране ещё до поднятия трубки)
С первой задачей наверняка справится ATSlog. Но как написать программу для второй задачи, которая будет перехватывать лог от станции, не мешая работе ATSlog? Или придётся писать программу для обеих задач?
Теперь подробно о второй задаче. Насколько я понимаю, нужно будет написать приложение под Windows, которое будет подключаться к демону FreeBSD по сети на определённый порт и реагировать на получаемые данные (искать клиента в базе по номеру звонящего и отображать информацию на экране большими буквами). Значит, нужно написать сетевой демон, который слушает определённый порт и обрабатывает данные получаемые по COM-порту в реальном времени. Какой язык программирования лучше использовать для этой задачи?
Makefile - использовать список имён файлов. Типа: массив., Aick, (Разное) 17-Мрт-15, 20:53  [ | | ] [линейный вид] [смотреть все]
Есть архитектурно независимые скрипты, разложены по каталожикам.
В мэйк файле:
Есть цель - упаковать код в tar.gz.
Есть цель - install.
Обе работают с одинаковым списком файлов.

Я хочу этот список файлов объявить в начале Makefile, а затем в разных местах использовать его. Есть такая возможность? Объявить массив строк и потом работать с ним внутри разных целей.

Почему список - потому как хочется, чтобы если в момент установки что-то "лишнее" лежит в дереве, то чтобы оно игнорировалось при make install. Можно сразу "забирать" целиком дерево файлов, задним числом ставить права доступа и т.д. Но так не хочу. Хочу мучаться со списком файлов (шаблонов-регулярок).

Писать инсталлятор и упаковщик в tar.gz, на том языке, который "умеет массивы", вызывать их обоих из мейка - чего-то тут не так, это, значит, свой мэйк выписывать заново.

Как бы это всё красиво организовать...? Таки держать чистым дерево "сырцов", забирать его "как есть" при упаковках и установках?

Таки есть способ использовать массив в мейк файле?

AT-команды для авторизации 3G модема, Modem_3G_AT, (Демоны, Сигналы) 17-Мрт-15, 19:00  [ | | ] [линейный вид] [смотреть все]
купил юзаный старый 3Gмодем на дачу, zte mf192
на древнем писюке стоит Slax.org
НетворкМанагер находит его и конфигурит инет интерфейс usb0
А дальше глухо

dhcpcd usb0 ругается no carrier (я раньше никогда им и не пользовался)

Нарыл в сети совет использовать wvdial, но у семерки уже его в модулях нет
И вообще никаких продвинутых прог для ppp нету, не модно уже
В мудрых советах прочел что pppd сей агрегат не заводит, пилить бесполезно

Вспомнил молодость и попробовал руками :-) у меня две руки :-))

> screen /dev/ttyACT0 115200

atz
OK
at+cgdcont=1,"ip","internet.mts.ru",,0,0
OK
atdt*99#
CONNECT 72000000

Значит таки коннект есть, а что дальше?
Как там авторизоваться и получить IP?


В настройках wvdial.conf еще записано user: mts и password: mts
Но дальше диалога не видно, непонятно чё писать

Есть кто эту кухню знает и посоветует что или хотя бы где искать?
Последний раз я такими делами занимался с USRobotics

Тут можно на перле в две строки всё устроить, знать бы там что ей еще надо

Спасибо


Захват данных с камеры, steveg, (C/C++) 16-Мрт-15, 20:25  [ | | ] [линейный вид] [смотреть все]
Здравствуйте!!  У меня такого рода вопрос. На руках камера Evidence, с которой я библиотекой live555 забираю поток rtp over udp. Камера наведена на консоль с текущим временем системы, но время , когда кадр получен библиотекой, отличается на 0.3 секунды от времени с консоли (текущего системного). Естественно, время кадра больше, чем время на кадре. С чем бы это могло быть связано? С особенностями камеры, с особенностями потока, или это все библиотека портит?
При запуске скрипта Expect через Web, gpfspam, (Shell скрипты) 28-Фев-15, 05:28  [ | | ] [линейный вид] [смотреть все]
Добрый время суток!

Не могу понять в чем проблема. Пытаюсь подтянуть инфу с железки по telnet через скриптик

#!/usr/bin/expect -f
log_user 1
spawn telnet 192.168.1.15
expect "Login:" {send "root\r";}
expect "Password:" {send "root\r"}
expect "# " {send "exit\r"}
expect eof


Первый способ (запуск через консоль).
Все прекрасно работает, на железку попадаю.

Второй способ (через WEB)
Необходимо вывести инфу на web страничку. Использую PHP. И в итоге сталкиваюсь с тем, что после ввода Login:root получаю Press any key to continue (Q to quit).

На других типах железа такого не происходит.

Неужели придется после каждой строчки ввода, обрабатывать это сообщение Press any key to continue (Q to quit).

Как заменить пробелы на один пробел, Dark Smoke, (Shell скрипты) 25-Фев-15, 18:03  [ | | ] [линейный вид] [смотреть все]
Добрый день
Подскажите, как заменить заранее неизвестное кол-во пробелов на один пробел в шеле

пример
11  22    333  444        5555

tcpdump для sip, Fazatron, (Отладка и профилирование) 16-Фев-15, 15:54  [ | | ] [линейный вид] [смотреть все]
Добрый день!
Используем tcpdump для диагностики sip и выглядит он примерно так:

90.107.249.222.5468 > 90.107.248.2.5060: SIP, length: 468
        OPTIONS sip:2210224@90.107.249.222:5060 SIP/2.0
        Via: SIP/2.0/UDP 90.107.249.222:5468;rport;branch=z9hG4bK-o26268163942656145886888
        From: <sip:90.107.249.222>;tag=26268163942656145886686
        To: <sip:2210224@89.107.249.222>
        Call-ID: 1424-88870-790006
        CSeq: 780424 OPTIONS
        User-Agent: Eltex smg_pa_sip 3.2.1.42
        Max-Forwards: 70
        Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, UPDATE
        Supported: 100rel, replaces
        Content-Length: 0

но вот в чем проблема, когда порт источника и назначения нестандартный и отличается от 5060, выглядит он вот так:

17:14:34.025921 IP (tos 0x60, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 859)
    90.107.249.222.5468 > 90.107.248.2.1442: UDP, length 831
17:14:34.080314 IP (tos 0x0, ttl 63, id 12718, offset 0, flags [none], proto UDP (17), length 412)
    90.107.248.2.1442 > 90.107.249.222.5468: UDP, length 384
17:14:34.087907 IP (tos 0x0, ttl 63, id 12719, offset 0, flags [none], proto UDP (17), length 495)

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

использование библиотеки libssh, Alex, (C/C++) 16-Фев-15, 13:39  [ | | ] [линейный вид] [смотреть все]
libssh.org

хочу подключиться на cisco роутер выполнить команду и отключиться.

к библиотеки прилагаются некоторые примеры, на их основании пытаюсь написать своё.
почему libssh - по тому, что штатно в линуксе ничего не нашел.

коротко: устанавливаем подключение ssh на роутер, по имени пользователя и паролю.
открываем канал. отправляем команду "en" для перехода в административный режим:
rc = ssh_channel_request_exec(channel, "en");
читаем, что шлет нам роутер. "password:" отлично.

а какой функцией вводить пароль?

rc = ssh_channel_request_exec(channel, "********");
вылетает в ошибку djpdhfn -1:
[1] Error : Channel request exec failed
пробовал еще:
printf("******\n")
тоже ни как..

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

Редактирование CSV, salvani, (Shell скрипты) 12-Фев-15, 16:56  [ | | ] [линейный вид] [смотреть все]
Приветствую!

Имеется CSV файл, в котором поля разделены запятыми, но если в значении поля присутствует символ "запятая", то такое поле взято в кавычки. Примерно вот так:

data1,data2,"34,56"

Вопрос в том, возможно ли с помощью awk или еще как-то из командной строки убрать кавычки, но при этом не испортить значения в третьем поле? То есть, привести файл к такому виду:

data1;data2;34,56

подключение библиоте к С, Alex, (C/C++) 10-Фев-15, 13:16  [ | | ] [линейный вид] [смотреть все]
подскажите пожалуйста как к своей програмке на Си (linux) подключить библиотеку libssh ?

в инструкции написано что ее надо установить. на сколько это необходимо? могу я просто добавить (скопировать) исходники в свою папку-проект и скомпелировать все вмести. подскажите как это обычно делается. мне это надо для переносимости между компьютерами.

dhclient dhcp client получение нового адреса удаляется маршрут, tnega, (Shell скрипты) 05-Фев-15, 07:03  [ | | ] [линейный вид] [смотреть все]
Всем привет! требуется помощь!

Интерфейс eth0 получает белый ип по dhcp (ipoe)

есть таблица маршрутизации, предположим она будет называться так же eth0 (/etc/iproute2/rt_tables)

пишу правило маршрутизации для определенного абонента:
ip route add default dev eth0 table eth0
ip rule add from 10.10.1.1/32 table eth0

все работает, интернет маршрутизируется через eth0, НО

но когда приходит время получать новый ип (dhclient обновит его через пол дня примерно), правило маршрутизации удаляется (ip route add default dev eth0 table eth0).

помогите советом, как оставить правило работающим?

OpenCV - утилита для автовращения картинки на +/-15 градусов, xintrea, (Библиотеки, функции) 03-Фев-15, 16:56  [ | | ] [линейный вид] [смотреть все]
Есть задача: имеется куча ~350 отсканированных листов в виде PNG-файлов, причем отсканированных небрежно: каждый лист повернут на случайный угол в +/-15 градусов.

Исходника для пересканирования нет. Исходник - техническая документация, то есть текст на белом фоне, Ч/Б рисунки, диаграммы, таблицы. Видны края листа (не везде).

Для дальнейшей обработки и печати нужно привести эти файлы в более человеческий вид. Одна из задачь - повернуть изображение так, чтобы "выровнять горизонт". Повернуть я могу через ImageMagic (утилита convert). Весь вопрос - на какой угол поворачивать.

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

Вопрос: есть ли такая утилита, например, на базе библиотеки OpenCV? Если ее нет, насколько трудозатратно ее написать? Я сам OpenCV ни разу не щупал. Готов поковыряться, но нужно знать, реально ли с помощью OpenCV решить такую задачу?

Может быть, есть другие решения?


ip route ifconfig alias, tnega, (Shell скрипты) 03-Фев-15, 09:54  [ | | ] [линейный вид] [смотреть все]
Приветствую Всех!

Имеем шлюз!

Подключены к провайдеру НетВуНет :-) технология так называемае Ipoe, выдается белый ип по dhcp.

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

Решили организовать данную технологию на шлюзе:

ip link add link eth0 name eth2 address 00:00:00:00:00:01 type macvlan
ip link add link eth0 name eth3 address 00:00:00:00:00:02 type macvlan
ip link add link eth0 name eth4 address 00:00:00:00:00:03 type macvlan

dhclient eth2
dhclient eth3
dhclient eth4

Интерфейсы поднимаются, пинги идут.

Хотим подсадить пользователя на один из каналов:

ip route add default dev eth4 table eth4
ip rule add from 10.10.1.1/32 table eth4

и в итоге у пользователя ничего нет :-(

если посадим его на первый интерфейс поднятый (eth0) - все ОК.

в чем может быть причина?

Вывод команды ip route

default dev eth0  scope link
176.194.128.0/18 dev eth2  proto kernel  scope link  src 176.194.158.202
176.194.128.0/18 dev eth3  proto kernel  scope link  src 176.194.151.33
176.194.128.0/18 dev eth4  proto kernel  scope link  src 176.194.152.4

кстати, при traceroute через алиас интерфейсы я вижу первым шлюзом в цепочке шлюз eth0

общий лимит дескрипторов сокетов и файлов, jet8001, (Сеть, сокеты) 03-Фев-15, 07:27  [ | | ] [линейный вид] [смотреть все]
система FreeBSD 8/9/10

в sysctl прописано

kern.maxfiles: 204800
kern.maxfilesperproc: 200000

все действия производятся под рутом

отдельно взятый процесс даёт открыть только 32764 файловых дескрипторов (32768 / 0x8000 вероятно лимит вместе с откртыми системой изначально)

если открыть 32768 сокетов, то файлов можно открыть после этого 0
(дальше ошибка - EMFILE /* Too many open files */)
хотя сокеты можно продолжать открывтаь до лимита в 200к
само собой если в это время смотреть в kern.openfiles, то до kern.maxfilesperproc: 200000 там очень далеко

тоесть вот этот лимит непонятный в 32768 он общий на файлы и сокеты открытые, но при заполнениии сокеты его игнорируют, а файлы нет

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

Поймать и определить сигнал, datswd, (C/C++) 01-Фев-15, 18:04  [ | | ] [линейный вид] [смотреть все]
Добрый здравствуйте.

Apache запускает приложение, которое обрабатывает stdin (загрузка файла). Если соединение прерывается (происходит разрыв :)), приложение закрывается автоматически apach`ем.
Какой при этом срабатывает сигнал?
SIGINT SIGQUIT SIGKILL попробовал. Вроде не они (3% что косяк в самой проверке).

Так вот из первого вопроса проистекает главный вопрос.
Каким образом можно посмотреть каким именно сигналом происходит это закрытие.

Брутфорсить не хочется. Их там штук 30.

Вывод чисел в столбик с помощью printf на BASH, Astylos, (Shell скрипты) 31-Янв-15, 13:14  [ | | ] [линейный вид] [смотреть все]
Помогите в решении задачи на BASH:
"Сценарий должен вывести (на stdout) все простые числа, в диапазоне от 60000 до 63000. Вывод должен быть отформатирован по столбцам"

Это из книги:
"Advanced Bash-Scripting Guide
Искусство программирования на языке сценариев командной оболочки
Автор: Mendel Cooper"

Значения у нас хранятся в файле integer допустим.
Я делаю так:

printf '%d \t' `cat integer`

#\t это горизонтальная табуляция

И числа выводятся одно за другим в СТРОКУ, а нужно чтобы они столбиком выводились. Кто-нибудь знает? Задача простая. Но разобраться не могу. Хотя 7 заданий до этого сам решил.

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

Android 4.4: запись на SD карту сторонними приложениями, xintrea, (Портирование) 17-Янв-15, 13:25  [ | | ] [линейный вид] [смотреть все]
Я изредка занимаюсь разработкой под Android (на Qt). Недавно узнал, что Гоголь заблокировал для сторонних приложений возможность записи на внешнюю SD-карту. А чтобы писать на SD, нужно рутование девайса.

Таким образом, я не могу заставить свое приложение нормально работать на железке, так как данные занимают около 1Гб, а на внутренней памяти места нет.

Нашел следующее решение:

Как в Android 4.4 KitKat разрешить запись на SD карту без рутования
http://webhamster.ru/mytetrashare/index/mtb0/1421490641w34hn...

На примере Яндекс Карт.

1. Идем в магазин #Google Play Store, открываем страничку нужного приложения и видим его ключевое название (ID) в адресной строке, в нашем случае из “https://play.google.co…d=ru.yandex.yandexmaps” понятно, что название/ID приложения “ru.yandex.yandexmaps”

2. Создаем через системный файловый менеджер (который идет с официальной прошивкой и может писать и удалять на карте где угодно) папочку для данных нашего приложения в формате “/storage/sdcard1/Android/data/myappname” – в нашем случае с картами Яндекса будет “/storage/sdcard1/Android/data/ru.yandex.yandexmaps”.

3. Запускаем приложение и в нем указываем созданную папку, при необходимости (в случае карт Яндекс это требуется) – перезапускаем приложение.

4. Получаем профит – карты отлично скачиваются и сохраняются на внешнюю карту.

И так для любого приложения и без всякого рута!


Вопрос в следующем. Может ли программа САМА создать свой каталог с именем типа “/storage/sdcard1/Android/data/ru.yandex.yandexmaps”? Или его обязательно нужно вручную создавать через системный файловый менеджер? Сейчас проверить не могу, может кто-то уже пробовал, что получилось?

Использование переменных в регулярных выражениях, Yarolin, (Shell скрипты) 16-Янв-15, 20:26  [ | | ] [линейный вид] [смотреть все]
Доброго времени суток))) пожалуйста, посоветуйте)))вот у меня есть переменная VAR, значение которой - строка "44;55;44", к примеру) у меня есть файл, в котором мне нужно посчитать количество строк, три первых поля которых совпадают с этой переменной, а четвёртое поле не равно 0 (разделитель полей ";"). как мне с помощью grep это сделать-то? что-то типа grep -c '$i;[^0]$' file . Но это, естественно, не работает... Заранее спасибо))
использование файла шаблонов в GREP, Yarolin, (Shell скрипты) 16-Янв-15, 13:02  [ | | ] [линейный вид] [смотреть все]
Доброго времени суток)) Подскажите пожалуйста)) Вот есть файл templates с шаблонами. В нём есть две такие строчки, к примеру: 456;55 и 457;55. в GREP есть ключ -f, который позволяет делать выборку по строкам из файла шаблонов: grep -f templates file. Как сделать так, чтобы не писать в этом файле 2 строчки, а в одной строчке сделать регулярное выражение типа <456,457>;55 и чтобы при этом данная конструкция поняла этот шаблон именно как регулярное выражение, а не строчку? Заранее спасибо))
Работа с полями в окнах XWindow, andymal, (GUI, XWindow, Qt, GTK) 15-Янв-15, 22:39  [ | | ] [линейный вид] [смотреть все]
Доброго времени суток!
Проблема у меня в следующем: не могу найти информацию, как мне с использованием только XLib в найденном окне (механизм поиска и активирования нужного окна по его названию я нашел) в нужное поле поместить нужную строку символов и нажать на нужную кнопку (а вот механизмы работы с полями в найденном окне не могу найти).
Может кто-либо подскажет где мне найти примеры работы с полями в окнах XWindow???
iptables почему-то нет доступа к ресурсам?!, tnega, (Shell скрипты) 05-Янв-15, 22:06  [ | | ] [линейный вид] [смотреть все]
Приветствую всех!

Имеется шлюз, конфиг таков:

iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t mangle -F PREROUTING
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -I FORWARD 1 -m mac --mac-source 00:11:22:33:44:55 -s 10.20.1.1 -j ACCEPT
iptables -I FORWARD 1 -m mac --mac-source 00:11:22:33:44:56 -s 10.20.1.2 -j ACCEPT
и т.д.

как Вы видите, у нас есть авторизация по IP и MAC.

Хотим открыть бесплатный доступ пользователям на аську, даже если у абонента нет доступа к Интернету: (login.icq.net)
iptables -I FORWARD 1 -d 178.237.17.180 -j ACCEPT
iptables -I FORWARD 1 -d 178.237.17.175 -j ACCEPT
iptables -I FORWARD 1 -d 178.237.19.180 -j ACCEPT
iptables -I FORWARD 1 -d 178.237.19.175 -j ACCEPT

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

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

bash одна команда выполнить все значения из файла, tnega, (Shell скрипты) 04-Янв-15, 14:26  [ | | ] [линейный вид] [смотреть все]
Доброго времени суток всем.
Тренируюсь в bashe, хочу сделать свой самописный биллинг, для своего собственного удобства.

Имею текстовую базу данных вида: (файл base)

user1 10.10.0.1 00:00:00:00:00:00
user2 10.10.0.2 11:11:11:11:11:11
user3 10.10.0.3 22:22:22:22:22:22

подскажите пожалуйста, как сделать чтобы команда iptables -I FORWARD 1 -m mac --mac-source $mac -s $ip -j ACCEPT

выполнилась для всех значений из данной базы.

Подключаю (или отключаю подправив кое что) пользователей таким скриптом:

while [ 1 ]
do
echo "Введите абонента:"
read name
ip=`sed /$name/p -n base | cut -d" " -f2`
mac=`sed /$name/p -n base | cut -d" " -f3`
iptables -I FORWARD 1 -m mac --mac-source $mac -s $ip -j ACCEPT
exit
done

Так же хотелось бы сделать так, чтобы закоментированный строки в нашй базе данных не выполнялись.

Как правильно парсить имена файлов с концом строки в середине?, AV, (Языки программирования) 02-Янв-15, 17:06  [ | | ] [линейный вид] [смотреть все]
Тупой случай под Linux - в середине имени файла вставлен "разрыв строки", тот самый '\n', который при разные утилиты парсят по разному. Попытка напечатать его своим кодом красиво печатает две части на разных строках. :)

Дальше надо работать с этим именем. А как обычно такую "ересь" обрабатывают? Утилита 'md5sum' вместо разрыва строки пишет \n. Видимо, надо мимикрировать под это поведение... Может - нет.

Например, wget умеет вставлять в имена файлов "весёлые" буквы, сохраняя веб страницы. Как-то с ними работают...

Как обычно работают с такими именами? Никак :), видимо, т.к. пока нет нужды печатать их, до тех пор это объект строка как есть и весёлые буквы внутри никого не трогают.


Как воспроизвести:

Берём Midnight Commander (у меня 4.8.11-1, из Убунту репо), выбираем файл, жмём Shift+F6, в середине имени вписываем \n и жмём энтер. Поиском средствами Питона находим это имя и печатаем - см. код ниже:



#!/usr/bin/python

import os
import sys


escape_dict={'\a':r'\a', '\b':r'\b', '\c':r'\c', '\f':r'\f',
           '\n':r'\n', '\r':r'\r', '\t':r'\t', '\v':r'\v',
           '\'':r'\'', '\"':r'\"', '\0':r'\0', '\1':r'\1',
           '\2':r'\2', '\3':r'\3', '\4':r'\4', '\5':r'\5',
           '\6':r'\6', '\7':r'\7', '\8':r'\8', '\9':r'\9'}

def raw(text):
    """
        Returns a raw string representation of text
        http://code.activestate.com/recipes/65211-convert-a-string-i.../
    """
    new_string=''
    for char in text:
        try: new_string+=escape_dict[char]
        except KeyError: new_string+=char
    return new_string

def findFiles(topDir):
    namesList = []
    for root, subDirs, files in os.walk(topDir, followlinks=False):
        for file in files:
            namesList.append(os.path.join(file))
    return namesList


if __name__ == "__main__":
    namesList = findFiles(".")
    for name in namesList:
        sys.stdout.write("Text:\t\t" + raw(name) + '\n')
        sys.stdout.write("Just string:\t" + name + '\n')
        sys.stdout.write('\n')

Как в Python открыть текстовый файл 'без кодировки'?, AV, (Разное) 02-Янв-15, 12:35  [ | | ] [линейный вид] [смотреть все]
Как сделать что-то типа вот такого:
fileHandle = open(filename, 'r', encoding=None)

чтобы encoding не использовалось?

Есть файл, созданный из Shell редиректом StdOut в этот файл. Файл со списком имён файлов. Хочу прочитать его Питоном и т.д.

Файл в UTF8, как я понимаю. Что-то в нём кривое оказалось (кривое имя - имя файла, когда-то сохранённого из WWW). Содержимое файла корректно можно увидеть не в каждом текстовом редакторе.

Файл со списком просто так не парсится Питоном -

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 7943: invalid continuation byte

Как побороть?

P.S. В Питоне поигрался с codecs - нужного сочетания не нашёл (но его и нет, как я понимаю)

import codecs
fileHandle = codecs.open(fileWithDigest, 'r', encoding=xxx)

Вернуть объект из функции на Shell. Чем заменить, как делают?, AV, (Shell скрипты) 26-Дек-14, 22:16  [ | | ] [линейный вид] [смотреть все]
В языках программирования функции могут возвращать "сложные" объекты. Массивы, хэши-словари. Есть что-то похожее для Shell (Bash, или иное)?

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

Я так понимаю, что правильный ответ - Perl, с выключенными "предохранителями". Там можно всё нужное, да. Именно. Но вопрос таки про Bash или иной распространённый Shell.

Может быть есть какой-то известный, распространённый стиль/стратегия, которые позволяют обойтись?

Есть вот такой код (Bash 4):


#!/bin/bash

set -x
set -e

declare -r fileTmpA="/tmp/$( basename "${0}" )_A"
declare -r fileTmpB="/tmp/$( basename "${0}" )_B"
trap "rm '${fileTmpA}' '${fileTmpB}'" EXIT HUP INT TERM


################################################


declare -A dictionary_A
declare -A dictionary_B

echo -ne "0000\n1111\n" > "${fileTmpA}"
echo -ne "2222\n3333\n" > "${fileTmpB}"

while read value ; do
    key="$( echo "${value}" | md5sum | cut --delim=' ' --field 1 )"
    dictionary_A["${key}"]="${value}"
done <<< "$( cat "${fileTmpA}" )"

while read value ; do
    key="$( echo "${value}" | md5sum | cut --delim=' ' --field 1 )"
    dictionary_B["${key}"]="${value}"
done <<< "$( cat "${fileTmpB}" )"


################################################


set +x
echo "________________________________________________"
for key in "${!dictionary_A[@]}" "${!dictionary_B[@]}" ; do
    echo "Have key: ${key}"
done


А теперь фейковый вариант.
Bash так не умеет,
но это пример того,
какой примерно инструмент хотелось бы.
Хочется использовать какой-то код типа такого:


#!/bin/bash

set -x
set -e

declare -r fileTmpA="/tmp/$( basename "${0}" )_A"
declare -r fileTmpB="/tmp/$( basename "${0}" )_B"
trap "rm '${fileTmpA}' '${fileTmpB}'" EXIT HUP INT TERM


################################################


function fillDictFromFile {
    local -r fileName
    local -A dictionary
    while read string ; do
        key="$( echo "${string}" | md5sum | cut --delim=' ' --field 1 )"
        dictionary["${key}"]="${value}"
    done <<< "$( cat "${fileName}" )"
    return dictionary
}


echo -ne "0000\n1111\n" > "${fileTmpA}"
echo -ne "2222\n3333\n" > "${fileTmpB}"

declare -A dictionary_A="$( fillDictFromFile "${fileTmpA}" )"
declare -A dictionary_B="$( fillDictFromFile "${fileTmpB}" )"


################################################


set +x
echo "________________________________________________"
for key in "${!dictionary_A[@]}" "${!dictionary_B[@]}" ; do
    echo "Have key: ${key}"
done

Как делают? Perl, C и т.д.  :) :) - да, я знаю их и др. А вот есть ли что-то для Shell?

раздача wifi в ubuntu serwer 12.04, palit, (Разное) 23-Дек-14, 16:29  [ | | ] [линейный вид] [смотреть все]
Добрый день !

Подскажите как можно настроить wifi сетевую карту для раздачи на Ubuntu serwer 12.04 ?
При включении сервера wifi карта видится, командой iwlist wlan0 scan показывает доступные сети. Чере время wifi карта перестает работать: iwconfig wlan0 выдает

wlan0     IEEE 802.11bg  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

iwlist wlan0 scan: wlan0     No scan results
lspci -v:
Ethernet controller: Atheros Communications Inc. AR5212/AR5213 Wireless Network Adapter (rev 01)
        Subsystem: Atheros Communications Inc. TRENDnet TEW-443PI Wireless PCI Adapter
        Flags: bus master, medium devsel, latency 168, IRQ 16
        Memory at feaf0000 (32-bit, non-prefetchable) [size=64K]
        Capabilities: [44] Power Management version 2
        Kernel driver in use: ath5k
        Kernel modules: ath5k
Нужно ли установить драйвер для wifi или как вывести карту из этого режима чтобы  был Power Management:on
настройка сети в /etc/network/interfaces стандартная

Массив, Void указатели и адреса. Отладка программы C++ , Messian, (C/C++) 18-Дек-14, 13:11  [ | | ] [линейный вид] [смотреть все]
Надо было написать программу сортировки с использованием функций из учебника. соответственно Compare, Find_minimum_index, Swap и SwapChar. Ввод и вывод я таки сделал с помощью шаблонов, а остальное как то так. Так как по сути void указатель в функции - это обычный указатель неопределенного типа, то принимать на вход он должен адрес первого элемента массива. (array или &array - непринципиально?).

Функции из учебника, а значит а приори рабочие. Но сортировки как таковой нет. Последний элемент идет в начало массива, остальные сдвигаются. Отладка показывает непонятные цифры в compare.
Шаблонами в этих функциях пользоваться нельзя.


#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;

typedef int(*CompareFunctionType) (void *, void *);


template < class T >
void input(T *arr, int le)
{

    for (int i = 0; i<le; i++)

        cin >> arr[i];
}
template< class N >
void output(N* arr, int le)
{
    for (int i = 0; i<le; i++)

        cout << arr[i];
}


int CompareInt0to9(void *first_pointer, void *second_pointer) //принимает на вход
//адреса и смотрит что под ними
{
    int *first_element_int_pointer = (int *)first_pointer;
    int *second_element_int_pointer = (int *)second_pointer;
    return *first_element_int_pointer - *second_element_int_pointer;  
}

int CompareCharAtoZ(void *first_pointer, void *second_pointer)
{
    char *first_element_int_pointer = (char *)first_pointer;
    char *second_element_int_pointer = (char *)second_pointer;
    return *second_element_int_pointer - *first_element_int_pointer;
}

void SwapChar(char *first_pointer, char *second_pointer)//меняет местами два байта
{
    char temp = *first_pointer;

    *first_pointer = *second_pointer;

    *second_pointer = temp;

    return;
}
void Swap(void *first_pointer, void *second_pointer, int width)// меняет местами
//два адреса
{
    for (int byte_number = 0; byte_number < width; ++byte_number)
    {
        SwapChar((char *)first_pointer + byte_number, (char *)second_pointer + byte_number);
    }
    return;
}

int FindMinimumIndex(void *data_array, int width, CompareFunctionType compare_function_pointer, int first_index, int last_index)
{
    char *bytevise_array = (char *)data_array;//для удобства работы с void взят //char у которого размер ячейки 1 байт
    int minimum_index = first_index;
    int minimum_byte_number = minimum_index * width;//адаптируем размер ячейки
//под нужный формат
    int current_byte_number = 0;
    for (int element_number = first_index; element_number <= last_index; ++element_number)
    {
        current_byte_number = element_number * width;//номер байта- начало
//адреса i-го элемента
        if ((*compare_function_pointer) (&bytevise_array[current_byte_number], &bytevise_array[minimum_byte_number]) < 0)
        {
            minimum_byte_number = current_byte_number;
        }
    }
    minimum_index = minimum_byte_number / width; //возвращаем индекс
    return minimum_index;
}

void SelectionSort(void * input_data, int length, CompareFunctionType compare_function_pointer, int width)
{
    int i;
    int sa;
    for (i = 0; i<length; i++)
    {

        sa = FindMinimumIndex(&input_data, width, compare_function_pointer, i, length);
        char *bytevise_array = (char *) input_data;
        Swap(&bytevise_array[i*width], &bytevise_array[sa*width], width);
    }
}

void main()
{
    int arr[5];// пока что обычный int стат. массив на 5 элементов

    int length = 5;


    const int N = 2;

    CompareFunctionType compareFunctionPointers[N];
    compareFunctionPointers[0] = &CompareInt0to9;
    compareFunctionPointers[1] = &CompareCharAtoZ;


    input(arr, length);

    int width = 4;

    SelectionSort(&arr, length, compareFunctionPointers[0], width);

    output(arr, length);

    _getch();
}


bash script, grep c регуляркой, kislik, (Разное) 17-Дек-14, 16:47  [ | | ] [линейный вид] [смотреть все]
Всем привет!
Проблема, не получается грепнуть лог по регулярке.
Задача в логе выводить все записи за текущий час, то есть по шаблону
`date +%H`:*:*  если сейчас допустим 16:35:01 то он попадает под регулярку если сейчас 16-часов

cat /var/log/syslog | grep -E 16\:*\: не канает =( (попадает под шаблон 02:16:13 например)

 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | |
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.


  Закладки на сайте
  Проследить за страницей
Created 1996-2015 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList
п╡п╣я│п╣п╩я▀п╣ п╨п╟я─я┌п╦п╫п╨п╦ я─п╟п╥п╡п╩п╣п╨п╟я┌п╣п╩я▄п╫я▀п╣ пЁп╦я└п╨п╦ п╦п╫я┌я─п╣я│п╫я▀п╣ я└п╟п╨я┌я▀ я│п╪п╣я┬п╫я▀п╣ п╡п╦п╢п╣п╬ я│п╪п╣я┬п╫я▀п╣ п╦я│я┌п╬я─п╦п╦ п╦п╥ я│п╬я├я│п╣я┌п╣п╧