@scream3r

Странное поведение TIOCEXCL в Solaris?

Для начала объясню что мне нужно сделать. Я хочу установить для последовательного порта с которым я работаю эксклюзивный режим, т.е. чтобы больше никто не смог получить к нему доступ пока я с ним работаю. Понятное дело root может получить доступ, и скажу сразу, что я работаю не под root-ом.


Итак, для реализации этого я использую следующий код:
int fd;<br/>
fd = open(portName, O_RDWR | O_NOCTTY | O_NDELAY);<br/>
if(fd != -1){<br/>
 ioctl(fd, TIOCEXCL);<br/>
 int flags = fcntl(fd, F_GETFL, 0);<br/>
 flags &= ~O_NDELAY;<br/>
 fcntl(fd, F_SETFL, flags);<br/>
}<br/>


Так вот, затем я запускаю первое приложение и открываю в нём порт, всё пока нормально, после этого я запускаю второе приложение и пытаюсь в нём открыть порт на что получаю EBUSY и это тоже нормально. Но в этот самый момент моё первое приложение перестаёт работать, я не могу ни писать, ни читать, ни закрыть порт. В ответ я получаю ENXIO (No such device or address). Другими словами, после того как любое другое приложение попыталось открыть уже используемый порт, я больше не могу использовать fd(file descriptor) полученный первым приложением, такое чувство что порт просто закрывается в этот момент.


Уж второй день борюсь с Solaris-ом, в Linux и Mac OS X этот код работает без проблем а тут такая напасть, прошу вашей помощи господа.
  • Вопрос задан
  • 2532 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы