Безопасный способ использовать результат getpwnam()/getpwuid()?

Я работаю над Linux и FreeBSD. Когда я использую getpwnam() или же getpwuid()Я получаю указатель на passwd структура. Какой безопасный способ использования char* Члены этого passwd структура?

Страница man говорит, что эта структура является статическим объектом, но будет перезаписана последующими вызовами, поэтому я думаю, что безопасный способ - это использовать strdup() чтобы получить копию char* члены, а затем больше не использует passwd структура.

Правильно ли мое понимание?

1 ответ

Решение

Самый безопасный способ - не использовать их вообще, а вместо этого использовать getpwnam_r а также getpwuid_r, которые хранят результаты в буфере, предоставленном вызывающей стороной. Это не только устраняет проблему, о которой вы спрашиваете, но и делает ваш код безопасным для использования в многопоточном процессе.

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