Почему в последовательном порту должна быть установлена ​​опция «ни один терминал не должен контролировать процесс»? - PullRequest
0 голосов
/ 25 января 2019
fd = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY);    
                               /* O_NOCTTY - No terminal will control the process   */

Почему мы должны указывать или не указывать эту опцию? Что он делает и не делает?

1 Ответ

0 голосов
/ 25 января 2019

Ответ на этот вопрос приведен в документации для библиотеки GNU C :

Если указанный файл является терминальным устройством, не делайте его управляющим терминалом для процесса. См. Job Control , для информации о том, что значит быть управляющим терминалом.

В системах GNU / Hurd и 4.4 BSD открытие файла никогда не делает его управляющим терминалом, а O_NOCTTY равно нулю. Однако системы GNU / Linux и некоторые другие системы используют ненулевое значение для O_NOCTTY и устанавливают управляющий терминал при открытии файла, который является терминальным устройством; чтобы быть переносимым, используйте O_NOCTTY, когда важно избежать этого.

То есть, поскольку последовательное USB-устройство рассматривается как терминал, используйте флаг, если вы не собираетесь, чтобы он был подобным терминалу и позволяло устройству запуск / остановка заданий (например, процессов), которые связаны с ним с данным пользователем.

Дополнительное чтение:

...