Могу ли я дважды открыть свой собственный драйвер устройства из пользовательской программы под Linux? - PullRequest
2 голосов
/ 06 мая 2010

Где-то я читал, что открытие одного и того же файла дважды имеет неопределенную семантику и его следует избегать. В моей ситуации я хотел бы открыть свое устройство несколько раз, связав с ним несколько файловых дескрипторов. Все операции с файлами на моем устройстве безопасны. Есть ли какая-то часть Linux между небезопасным вызовом sys open () и точкой, в которой он вызывает операцию зарегистрированного файла .open ()?

Ответы [ 3 ]

3 голосов
/ 06 мая 2010

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

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

Если драйвер не поддерживает множественное открытие, он должен вернуть ошибку при повторном открытии.

1 голос
/ 07 мая 2010

Открытие одного и того же файла дважды имеет четко определенную семантику в случаях, которые имеют смысл. Процессы все еще нуждаются в некоторой форме синхронизации, если все они выполняют чтение / запись, в противном случае файл, скорее всего, окажется полным мусором.

Для драйвера устройства семантика множественных открытий полностью зависит от драйвера - некоторые драйверы запрещают его, в других он работает нормально (например, / dev / null). В некоторых драйверах это имеет особое значение (например, звуковые карты могут смешивать вывод звука между несколькими приложениями)

1 голос
/ 06 мая 2010

Вы можете открыть устройство дважды в одном и том же процессе, если драйвер разрешит вам это сделать. За синхронизацию отвечает водитель.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...