LINUX.ORG.RU

12
Всего сообщений: 46

Не удается запустить механизм Mqueue

Хочу освоить для одной задачи механизм Mqueue, это стандартный POSIX механизм IPC, который показался мне интересным. Отсоветуйте, если считаете его плохим, но он есть и на QNX 4 и на Linux, поэтому это портабельное решение для меня выходит.

Хочу слать сообщения, а они в другом процессе должны застревать до чтения третьим процессом, чтобы не городить два потока в программе. Выглядит всё вкусно.

Проблема вот в чем: не удается увидеть работу этого механизма, я явно что то делаю не так. Запускается сервер, открывается очередь под именем, под QNX 4 хотя бы открывается на сервере и клиенте, клиент что-то отправляет и это видно в статистике, сервер не видит данных. А под Linux попробовал - не работает и вовсе, канал не открывается.

Пробовал блокирующий и неблокирующий режим, но мне нужен неблокирующий - выстрелил и забыл. Далее код:

#include <stdio.h>
#include <mqueue.h>

char data[100000];

int main()
{
	mqd_t mq;
	struct mq_attr attr;
	int rc;

	attr.mq_flags = 0;
	attr.mq_maxmsg = 100;
	attr.mq_msgsize = 65536;
	attr.mq_curmsgs = 0;

	printf("test_mq_server\n");
	//mq = mq_open("/sqlite_sdb", O_CREAT | O_RDWR | O_NONBLOCK, 0660, &attr);
	mq = mq_open("/sqlite_sdb", O_CREAT | O_RDONLY, 0660, &attr);
	printf("mq opened, server mq= %d\n", mq);

	while(1)
	{
		rc = mq_receive(mq, data, 65536, NULL);
		printf("server rc= %d\n", rc);
		sleep(1);
	}

	mq_close(mq);
	mq_unlink("/sqlite_sdb");
	return 0;
}
#include <stdio.h>
#include <mqueue.h>

int main()
{
	mqd_t mq;
	char data[100000];
	int rc, i;

	printf("test_mq_client\n");
	//mq = mq_open("/sqlite_sdb", O_RDWR | O_NONBLOCK);
	mq = mq_open("/sqlite_sdb", O_WRONLY);
	printf("client mq= %d\n", mq);
	for(i = 0; i < 3; i++)
	{
		rc = mq_send(mq, "test_mq", 7, 0);
		printf("client rc= %d\n", rc);
		sleep(1);
	}
	mq_close(mq);
	//mq_unlink("/sqlite_sdb");
	return 0;
}

QNX4

test_mq_server
mq opened, server mq= 3
server rc= -1
server rc= -1
test_mq_client
client mq= 3
client rc= 0
server rc= -1
client rc= 0
server rc= -1
client rc= 0
server rc= -1
server rc= -1

Linux

test_mq_server
mq opened, server mq= -1
server rc= -1
server rc= -1
итого 0

------ Очереди сообщений --------
ключ   msqid      владелец права исп. байты сообщения
0x331100ea 0          root       622        0            0           

test_mq_client
client mq= -1

client rc= -1
------ Очереди сообщений --------
ключ   msqid      владелец права исп. байты сообщения
0x331100ea 0          root       622        0            0           

server rc= -1
client rc= -1
server rc= -1
client rc= -1
server rc= -1
server rc= -1
server rc= -1

Запускалось так

./test_mq_server &
sleep 1
./test_mq_client &
sleep 5

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

Под QNX4 хотя бы очереди открываются, а под Linux нет. Что-то надо запустить? Или модуль ядра запустить?

 , , ,

I-Love-Microsoft ()

Насколько хороши коммерческие юниксы?

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

 , , , ,

gragpigz ()

Легковесный VPN для коммуникации 2х устройств

Есть проблема.

Нужно с одного устройства ( назовём его клиент) несколько раз подключится по TCP к другому (назовём его сервер).

Но серверное устройство должно считать, что к нему подключились с разных ip адресов (будто разные устройства)

Единственное, что я придумал, это создание нескольких VPN с разными адресами и соответствущая настройка iptables на хостовом устройстве.

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

PS: решение должно быть кросс платформенным в среде UNIX (QNX, Linux).

 , , ,

letitbe ()

QNX 4.25 как осовременить?

По целому ряду совершенно непреодолимых обстоятельств, приходится работать с QNX 4.25 с этим засохшим продуктом мамонта. Там старый софт, там нет Qt, многого нет, но сама ОС сеть последовательные порты и даже NFS - работают, большего там и не надо.

Так как средства разработки в этой ОС отстали лет на 25, то хочется привнести в нее современное, современное GUI, может современный софт и библиотеки.

Первое с чего хотелось бы начать - это GUI. Пусть это GUI будет рисовать свой интерфейс прямо в память, пусть оно будет на языке Си так, что можно собрать компилятором 20-25-летней давности. А я уже мог бы вываливать битмап прямо в эту простую форму с одной рисовальной поверхностью, да передавать события мышки и клавиатуру в ответ. Почему не напрямую? Потому что надо оставаться в рамках древнего Photon GUI, а любая современная GUI либа точно подобное поддерживать не будет. Существуют ли такие библиотеки? libui требуется cmake 3.1+ и наверное современный компилятор, если только первое ограничение нельзя обойти. Можно что-то для микроконтроллеров посмотреть, наверное, у кого что на примете есть?

Еще более радикальный шаг - обернуть сразу множество современных библиотек на C++ - и вывалить в некое виртуальное окружение эмулятор типа QEMU, но соберется ли? Может получится упаковать в бинарь, который крутит чуть ли не целый экземпляр ОС типа Linux. На эту мысль меня натолкнули масса примеров как QEMU и многих других проектов засовывали в браузер поверх JavaScript, так быть может и тут можно аналогично поступить - засунуть на некую платформу, которую легко портировать, пусть это будет исполнялка байт-кода и работает в 5 раз медленее чем bare metal.

 , ,

I-Love-Microsoft ()

OpenQNX, Open Blackberry есть ли такое?

Есть ли попытки оупенизации ежевики?

 , ,

magnuz ()

Разделяемая память и ее защита.

Добрый вечер, форумчане!

Имеется вопрос, есть в проекте (операционка QNX4.25) несколько разделяемых объектов памяти, для взаимодействия между процессами. Есть один писатель в каждую из них и несколько читателей, я написал несколько функций оберток вида:

void XXXX_ShmemLock()
{
	assert( g_Shmem );
	sem_wait( &g_Shmem->lock );
}

void XXXX_ShmemUnlock()
{
	assert( g_Shmem );
	sem_post( &g_Shmem->lock );
}

void XXXX_ShmemCopy( void *destination, const void *source, const size_t num )
{
	XXXX_ShmemLock();
	_disable();
	memcpy( destination, source, num );
	_enable();
	XXXX_ShmemUnlock();
}

Дальнейшие операции более высокого уровня, выполняются путем вызова функций-оберток, как пример приложу:

void XXXX_ReadADC( const ADCChannel_t channel, double *voltage )
{
	assert( channel < ADC_ChannelsNum );
//	*voltage = g_Shmem->Vin[channel];
	XXXX_ShmemCopy( (void *)voltage, (const void *)&g_Shmem->Vin[channel], sizeof(g_Shmem->Vin[channel]) );
}

void XXXX_WriteADC( const ADCChannel_t channel, const double voltage )
{
	assert( channel < ADC_ChannelsNum );
//	g_Shmem->Vin[channel] = voltage;
	XXXX_ShmemCopy( (void *)&g_Shmem->Vin[channel], (const void *)&voltage, sizeof(voltage) );
}
P.S. Насколько рационален такой подход?

Так вот, как видно в функции XXXX_ShmemCopy, копирование данных в область и из нее, производится вызовом memcpy, обернутым в семафор и дополнительным отключением прерываний на момент копирования, чтобы обеспечить атомарность операции. Есть ли вообще смысл в такой перестраховке на однопроцессорной системе? Минус в использовании _disable()/_enable() при больших объемах копирования (которых скорее всего не будет), на момент выполнения операции, стопорится работа всей системы, или если вызовов XXXX_ShmemCopy будет много (а их скорее всего будет много), то рискуем то и делать что бесконечно выключать/включать прерывания. Так же есть ли необходимость оборачивания простых операций вида «Область->переменная = что-то записать», понятное дело не делая справа от «=» сложных операций, будет ли такая операция выполнена атомарно?

 , , , ,

subuser ()

Для тех, кто обожает экстрим

Ребяты, пилят опенсорсный и кроссплатформенный набор автопилота.

Тот неловкий момент когда принцип камаза как никогда применим к ключевым разработчикам :)

 , , , ,

pon4ik ()

Бинарная совместимость QNX 6.x

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

 

AUX ()

Очистка ресурсов QNX Message Queue

Вопрос крайне простой. Как из терминала очистить дескрипторы закреплённые за Message Queue, которые расположены в /dev/mq?

Прямой вызов

rm /dev/mq/*

Не даёт нужного результата:

/home/foobar # ls /dev/mq/
ls: readdir of '/dev/mq/' failed (Function not implemented)

Для очередей используем демон «mq». В мануале по самому демону информации о очистке ресурсов не нашёл.

Необходимо чистить ресурсы без перезагрузки (в скрипте watchdog).

Может кто что знает. Спасибо.

 ,

chak ()

Инженер-программист, г.Санкт-Петербург

В петербургскую компанию требуется программист для участия в разработках изделий преимущественно морского назначения для операционных систем Linux, QNX.

Требования скромные:

- опыт разработки на языках C/C++ от 1 года;
- желателен опыт разработки на Python;
- желателен опыт разработки с использованием Qt;
- знание или отсутствие боязни Bash;
- навыки администрирования Linux, QNX;
- умение или отсутствие боязни разбираться в чужом коде;
- готовность к самостоятельной работе;
- готовность к командировкам.

Зарплата от 80000р. Оформление по ТК РФ. Предоставление и оплата отпусков и больничных в соответствии с законодательством. ДМС. Пятидневная рабочая неделя, 8-ми часовой рабочий день.

Резюме слать на адрес: aleksey.karelin@rif-spb.ru

 , , ,

HongZa ()

Требуется программист С++ (Тула)

ООО НПО «Программные комплексы реального времени» (г. Тула) требуется программист.

Обязанности: разработка ПО на С++ и Qt для ОС QNX и Linux.

Полная занятость, полный рабочий день. Удалёнка невозможна. Оклад от 32 до 50 т.р. по результатам собеседования. Полный соцпакет.

Резюме направлять на tulapkrv@yandex.ru.

 ,

Oriole ()

В поисках QNX Car дистрибутива

Всем привет, ищу установочный образ QNX Car (qnx_car-201402230339.iso), либо additional package (apkruntime-201402230339.zip). В гугле эти файлы светятся только на официальном сайте QNX и на сайте, сохраняющем архив файлов с FTP серверов. К сожалению, FTP-сервер, на котором когда-то лежали нужные мне файлы уже недоступен. А вернуться в прошлое и скачать нужное тоже не могу. Искал уже на торрентах, emule и dc++. Где еще искать эти файлы - не знаю. Нужно мне все это для установки APK Runtime на имеющееся QNX Car устройство. Проект некоммерческий и QNX на такие дела уже не выдают лицензий... Может есть у кого? =)

 

embedded_d ()

No controlling tty (open /dev/tty: No such device or adrress)

Добрый день!

Подскажите пожалуйста, как исправить данную ошибку? sh: No controlling tty (open /dev/tty: No such device or adrress) sh: warning: won't have full job control

После этого неккоректно вводятся программы: #ls sh: dsl:cannot execute - No such file or directory

Заранее спасибо за помощь!

 , ,

igor_chernykh ()

io-graphics, qnx

Добрый день, прошу помощи в решении следующего вопроса : Для запуска qt(photon) нам необходимо запустить утилиту io-graphics, вызываю следующим образом (QNX 6.5.0 Neutrino): io-graphics -d vid=0x1022 did=0x2081 deviceindex=0 Получаю сообщение об ошибке:

Process <process_id> io-graphics exited status=1

В чем может быть проблема? Заранее спасибо за помощь.

 ,

igor_chernykh ()

Photon2 & QNX 6.5.0

Всем добрый день! Столкнулся со следующей проблемой - мне потребовалось установить графический сервер Photon 2 на мою QNX Neutrino, возникли трудности, не знаю где взять исходники и инструкцию по установке. Подскажите пожалуйста(перерыл очень много фтп и гуглил тоже)

Заранее спасибо за советы.

 ,

igor_chernykh ()

Senior SW Engineer (С/C++) @ Harman (релокация в Польшу, Лодзь)

Всем привет!

Harman International - один из мировых лидеров на рынке «connected car», а также среди производителей звукового оборудования и информационно-развлекательных систем, ищет талантливых С/C++ инженеров для работы в новом R&D центре компании в городе Лодзь (Польша). R&D офис был открыт весной 2015 года и продолжает активно расти и развиваться (на данный момент 180+ человек).

Обязательные требования:

  • уверенные знания С/C++ и коммерческий опыт работы в роли С/C++ разработчика не менее 4 лет;
  • умение писать хорошо структурированный, читабельный и простой в поддержке код;
  • уровень разговорного английского достаточный для ежедневного общения с коллегами в процессе работы;

Очень желателен опыт с:

  • Linux, в частности embedded Linux;
  • OSEK, QNX;
  • GNU tool chain;
  • CAN шиной;
  • любыми скриптовыми ЯП;
  • видео стримингом и/или обработкой видео/аудио;

Самым большим преимуществом будет предыдущий опыт работы на automotive проектах.

Компания предлагает:

  • заработную плату в рамках от 2k до 2.5k USD NET, а также бонус для переезда в размере 1.7k USD NET;
  • гибкий график работы;
  • оплату 50% стоимости обедов;
  • медицинскую страховку;
  • абонемент в спортзал;
  • курсы английского, польского или немецкого языка на выбор;
  • 20 - 26 дней отпуска;
  • оплату в размере 80% во время больничного;
  • участие в профессиональных семинарах и тренингах;
  • проживание в отеле на время поиска жилья (первые 2 недели);

С радостью отвечу на все интересующие вопросы и пообщаюсь тут или:

по почте - lily@venbesthire.com.ua

в скайпе - lichyan1989;

 , ,

lichyan1989 ()

Реализация сообщения о подключение USB flash в QNX 6.5

Доброго времени суток, уважаемые форумчане!) Пишу на С под QNX 6.5 и хочу реализовать следующее: Чтобы при подключении флешки появлялось сообщения о том, что флешка подключена и с ней можно работать. Аналогично, сообщение, если она отвалилась, и демонтировать флешку по нажатию кнопки. Пока сделал с использованием «жуткого велосипеда» : system(«pidin | grep -e \„devb-umass\“ > /home/umass.data»);

А потом просто повторяю в цикле эту функцию и проверяю файл /home/umass.data. Если там есть что-то, то значит драйвер запущен, следовательно, можно констотировать факт, что запоминающие устройство подключено. Если в файле что-то было, а потом он стал пустым, то логично допустить, что устройство было извлечено. Разумеется, данный подход мне не нравится и вот, что я подумал. Если при подключении флешки запускается драйвер, то могу ли я висеть на recv(), ожидая сообщение посланное от enun-devices (я ведь правильно понимаю, что он запустит devb-umass?)? А не в бесконечном цикле со sleep(). XD А может и поинтереснее способы есть?

 , ,

ISoWant ()

Помогите клонировать CompactFlash c QNX 4.x

Доброго дня, я являюсь инженером по обслуживанию мед техники, не так давно у нас на одном из аппаратов слетела прошивка, прошивка хранится на IDE CompactFlash(disk_on_module) объемом 32Мб. Есть возможность взять флешку с такого же аппарата для клонирования.

Купил новую флешку объемом 256Мб, пробовал клонировать акронисом,clonezilla, потом поставил линукс на виртуальную машину и пробовал сохранять через dd бинарник флешки , а затем его писать на новую флешку. Но при включении аппарат выдает ошибку: Boot Partition 1 ......... Operation system missing

Не могу понять в чем проблема. Снял бинарник записанный на флешку 256Мб которая. Сравнил через hex редактор с исходным с флешки на 32Мб, они один в один.

Подскажите как решить проблему? Я в линуксе не очень силен, команды dd, fdisk изучил)

 

Le0n35 ()

Установил QNX, удалил QNX а установить опять не могу!

Привет всем, поставил QNX в /opt/qnx660. Надо переустановить, ну я с дура rm -rf и сейчас при установке пишет «QNX software development platform already installed in NULL». Как быть, где он читает и понимает, что где то поставлена уже momentics? Спасибо!

 ,

Warezovvv ()

BlackBerry и вопросы

Лор, я решил купить ежевику. Есть ли здесь её владельцы? Интересуют некоторые нюансы. Она сильно проприетарна? Зондов много? Есть ли репозитории, пакетный менеджер, консоль(это же юникс) с консольным софтом? Совместима ли BBOS с QNX ARM? Часто ли возникает необходимость в ведроидном софте? Есть ли местный аналог F Droid и вообще много ли в сторе свободного нативного софта?

 , , , ,

vityatesak1 ()