LINUX.ORG.RU

Как сделать Device Busy для COM-порта?

 ,


0

1

Здравствуйте.

Подскажите как сделать чтобы только один процесс в один момент времени мог подключаться к ttyUSB0? По-умолчанию, почему-то могут подключаются все, после чего все дружно падают с ошибкой

★★★★★

можно использовать flock, но он соблюдается исключительно «добровольно», если разработчик приложения это учёл. то есть, приложение может игнорировать занятость файла и всё равно что-то туда писать, например.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Добровольно не вариант. А вот когда к tty подключен screen, попытки подключиться к этому tty из других програм тут-же проваливаются. Как он это делает..

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Как он это делает..

ну так посмотри исходник

dimon555 ★★★★★
()
Ответ на: комментарий от Krieger_Od

Спасибо. То что нужно. А POSIX lock из fcntl не сработает

makoven ★★★★★
() автор топика
Ответ на: комментарий от frame

Ну предложи что получше )

open(O_EXCL) хз, сработает ли, вообще не обязан. Других вариантов не просматривается, кроме патчения ядра.

Krieger_Od ★★
()
Ответ на: комментарий от makoven

Сам себе отвечу. Работает, как и написано, в советовательном режиме. Если установить эксклюзивную блокировку не может - возвращает ошибку и пишет «Resource temporarily unavailable». Правда это не мешает открывать устройство программам, которые не играют в POSIX advisory locking. Ну и черт с ними

struct flock fl = { .l_type=F_WRLCK, .l_whence=SEEK_SET,
  .l_start=0, .l_len=0 };
int ok = fcntl(tty, F_SETLK, &fl);
makoven ★★★★★
() автор топика
Ответ на: комментарий от Krieger_Od

Стандартный посиксовый механизм блокировки. Описан в man 2 fcntl. Советовательный в том смысле, что ОС не настаивает на блокировке. Процессы могут придерживаться этого механизма, если хотят.

makoven ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.