getenv("HOME") возвращает "/root" с "sudo"

Я пишу программу на моем Raspberry Pi, для которой требуется функция "getenv("HOME")", чтобы найти "/home/pi".

Однако, поскольку я использую библиотеку "wiringPi", для запуска которой требуется "sudo", "getenv("HOME")" теперь возвращает "/ root" в качестве каталога HOME вместо "/home/pi".

Есть ли способ найти "/ home / pi" с помощью "getenv("HOME")" при использовании "sudo" для запуска программы?

Любая помощь будет оценена. Спасибо.

1 ответ

Решение

Передача комментариев и ответа в ответ.

Если вы знаете, ответ /home/pi зачем тебе getenv("HOME") получить неправильное значение?

Это потому что getenv("HOME") это код из другой библиотеки, которую я пытаюсь запустить, которую я не могу изменить.

Предположительно, звонит setenv("HOME", "/home/pi", 1) это слишком похоже на обман?

setenv("HOME", "/home/pi", 1) работает для меня.

Почему вы уверены, что вам нужно /home/pi ? Почему нет /root правильно, когда программа запускается пользователем root (или кто-то работает под управлением sudo)?

Это становится в основном несущественным, если учесть, что есть еще одна неизменяемая библиотека.

В этом случае установка правильного значения для переменной среды перед вызовом другой библиотеки является в основном разумным механизмом.

Другие вопросы по тегам