Почему закрытие дескриптора файла stdin дает ошибку не запускается при ошибке RPi? - PullRequest
0 голосов
/ 27 мая 2020

Я делаю приложение, в котором Raspberry Pi считывает последовательные данные из файла / dev / rfcomm0. Я создал демон для прослушивания входящих соединений RFCOMM и запуска программы Python, отвечающей за чтение входящих последовательных данных с помощью вызова execvp. После инициализации демона я закрываю stdin, stdout и stderr в соответствии с руководством по демону, которое я нашел на http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html. По сути, эта ссылка говорит, что нужно сделать следующее:

  1. Отключить родительский процесс.
  2. Изменить маску режима файла (umask)
  3. Открыть любые журналы для записи.
  4. Создать уникальный идентификатор сеанса (SID)
  5. Изменить текущий рабочий каталог на безопасное место.
  6. Закрыть стандартные файловые дескрипторы.
  7. Ввести фактический код демона .

Мой демон не будет работать, пока я не удалю close(STDIN_FILENO) из своего кода. Если я не удалю этот код, я получу следующую ошибку, и я не знаю, как ее исправить.

File "/home/BluetoothProject/RFCOMMOut.py", line 7, in <module>
gpio.setup(led_pin, gpio.OUT)
RuntimeError: Not running on a RPi!

Примечание. Мне удалось распечатать свою ошибку, удалив close(STDERR_FILNO)

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