Безопасный способ использовать результат getpwnam()/getpwuid()?
Я работаю над Linux и FreeBSD. Когда я использую getpwnam()
или же getpwuid()
Я получаю указатель на passwd
структура. Какой безопасный способ использования char*
Члены этого passwd
структура?
Страница man говорит, что эта структура является статическим объектом, но будет перезаписана последующими вызовами, поэтому я думаю, что безопасный способ - это использовать strdup()
чтобы получить копию char*
члены, а затем больше не использует passwd
структура.
Правильно ли мое понимание?
1 ответ
Самый безопасный способ - не использовать их вообще, а вместо этого использовать getpwnam_r
а также getpwuid_r
, которые хранят результаты в буфере, предоставленном вызывающей стороной. Это не только устраняет проблему, о которой вы спрашиваете, но и делает ваш код безопасным для использования в многопоточном процессе.