Название: Читать файл(устройство) не блокируя его Отправлено: Kei от Апрель 13, 2010, 07:10 Бесконечным циклом читаю строки из /dev/ttyUSB2 и вывожу на экран.
Но после запуска моей программы, получить доступ для чтения к этому устройству уже никто не может. (Пытаюсь запустить pppd, сделать cat /dev/ttyUSB2, безрезультатно. И только после закрытия моей проги все начинает работать.) Открываю файл так. if (this->fDeviceRead.open(QIODevice::ReadOnly | QIODevice::Text)) { .... } Кстати, для записи в устройство, открываю тот же /dev/ttyUSB2 снова, но уже только на запись WriteOnly (Правильно ли так делать?) В итоге, другие программы могут писать, но не могут ничего читать. Как правильно организовать взаимодействие с устройством? Название: Re: Читать файл(устройство) не блокируя его Отправлено: kuzulis от Апрель 13, 2010, 07:31 как реализован
Цитировать fDeviceRead ?Цитировать Но после запуска моей программы, получить доступ для чтения к этому устройству уже никто не может. всё зависит от того как открывается у-во, т.е. от опций системного вызова open() и ioctrl(),т.е. в "ексклюзив" или "шаред" моде :) Цитировать Кстати, для записи в устройство, открываю тот же /dev/ttyUSB2 снова, но уже только на запись WriteOnly (Правильно ли так делать?) эмм.. непонятно зачемЦитировать В итоге, другие программы могут писать, но не могут ничего читать. эммм... так вам нужно, чтобы ваш ttyUSB2 могли использовать несколько приложений? или что вы вообще хотите сделать?Цитировать Как правильно организовать взаимодействие с устройством? зависит от ситуации... какая у вас цель?Название: Re: Читать файл(устройство) не блокируя его Отправлено: Kei от Апрель 13, 2010, 08:14 Цитировать как реализован QFile fDeviceRead;fDeviceRead ? Цитировать эммм... так вам нужно, чтобы ваш ttyUSB2 могли использовать несколько приложений? или что вы вообще хотите сделать? Цитировать зависит от ситуации... какая у вас цель? Да.Мое приложение построчно выводит все ответы устройства(Модема) на экран, а также может отправлять ему команды. Но когда я пытаюсь использовать pppd или wvdial они не могут получить ответ от /dev/ttyUSB2 т.к. он занят моей программой. Цитировать всё зависит от того как открывается у-во, т.е. от опций системного вызова open() и ioctrl(), Открытие в шаред мод это решение моей задачи? Как это можно реализовать в QT? (Так, чтобы я мог писать в него и читать, и при этом он был доступен другим приложениям)т.е. в "ексклюзив" или "шаред" моде Название: Re: Читать файл(устройство) не блокируя его Отправлено: kuzulis от Апрель 13, 2010, 08:40 Цитировать QFile fDeviceRead; уффф... посмотрите в сторону : QextSerialPort -> http://code.google.com/p/qextserialport/ или QSerialDevice -> http://fireforge.net/projects/qserialdevice/ Цитировать Мое приложение построчно выводит все ответы устройства(Модема) на экран, а также может отправлять ему команды. откройте ваш модем как ReadWrite и сможете из вашего приложения как читать из него так и писать в него всё что захотите.Цитировать Но когда я пытаюсь использовать pppd или wvdial они не могут получить ответ от /dev/ttyUSB2 т.к. он занят моей программой. уффф... 1. а вы уверены, что сможете обеспечить "правильное" использование ресурса (/dev/ttyUSB2) несколькими приложениями? 2. зачем вам одновременно использовать вашу программу и pppd/wvdial ? тем более, что pppd/wvdial монопольно использует ваш модем, т.е. если вы открыли ваш модем с помощью pppd/wvdial - то после этого, если попытаетесь открыть модем вашим приложением, то оно "не сможет/не должно" получить доступ к модему, т.к. он уже занят pppd/wvdial. (хотя нужно проверить - могу ошибаться) 3. если вы хотите (все-таки) чтобы ваш модем использовался в "шаред моде" - то посмотрите в сторону QextSerialPort, т.к. эта библиотека не блокирует и не проверяет занятость последовательного устройства в *.nix 4. если вы хотите кроссплатформенное решение (т.е. не только в *.nix) - то у вас может не выйти, т.к. в винде у вас может не "пройти" фокус с "шаред моде". Цитировать Открытие в шаред мод это решение моей задачи? Как это можно реализовать в QT? (Так, чтобы я мог писать в него и читать, и при этом он был доступен другим приложениям) 1. Посмотрите в сторону QextSerialPort2. если не получится - то что-то типо этого: http://www.easysw.com/~mike/serial/serial.html вам в помощь :) Название: Re: Читать файл(устройство) не блокируя его Отправлено: Kei от Апрель 16, 2010, 21:05 Цитировать 2. зачем вам одновременно использовать вашу программу и pppd/wvdial ? Я хочу работать с прочими функциями модема, и при этом быть в сети. Например, хочу периодически выводить уровень сигнала модема. В винде, программа которая идет с модемом подключается к сети, но при этом может показывать уровень сигнала, сеть и т.п. Может это не реально в линуксе? p.s. так и не понял как скачать http://code.google.com/p/qextserialport/ :( TortoiseHg скачивает в какой-то непонятной кодирвоке. UPD: Скачал через CMD |