Это не дает прямого ответа на вопрос, но я не думаю, что здесь задают правильный вопрос. Мне кажется, что спрашивающий хочет, чтобы программа работала иначе, предположительно, если у нее есть определенные разрешения или нет, однако я бы сказал, что проверка sudo - это не способ сделать это. Во-первых, многие системы могут не реализовывать «sudo», это ни в коем случае не требуется в Linux или многих Unixes.
Например, пользователь уже может войти в систему как пользователь root, что делает sudo бессмысленным, или, возможно, в системе есть пользователи без полномочий root, у которых все еще есть возможности для выполнения административных задач, которые программа может пожелать выполнить. Наконец, возможно, система вообще не имеет рута или sudo и вместо этого использует систему обязательного контроля доступа с различными возможностями и не может поймать всех суперпользователей, в которых может быть sudo. Или пользователь может быть заблокирован, но в учетную запись, которая имеет -less-разрешения, чем их собственная учетная запись по соображениям безопасности (я часто запускаю ненадежный код с временным непривилегированным пользователем, который может писать только на ramdisks, чтобы удалить, а не поднять мои разрешения ). В целом плохая идея предполагать наличие конкретной модели разрешений, такой как sudo или существование root, или предполагать, что sudoed-пользователь имеет какие-то особые привилегии.
Если вы хотите выяснить, есть ли у вас разрешения на выполнение операции, лучше всего просто попытаться сделать это, а затем проверить errno на наличие проблем с разрешениями, если она завершится неудачно или если это многоэтапная операция, которая должна либо завершиться неудачей, либо завершиться успешно. вы можете проверить, будет ли операция работать с такими функциями, как функция доступа POSIX (остерегайтесь возможных условий гонки здесь, если разрешения активно изменяются)
Если, кроме того, вам необходимо знать реального пользователя, стоящего за sudo, вы можете использовать функцию getlogin, которая должна работать для любого интерактивного сеанса с нижележащим терминалом и позволит вам, например, найти, кто «в действительности» выполняет команду для аудита, или найти Домашний каталог реального пользователя для сохранения логов.
Наконец, если вам действительно нужно выяснить, есть ли у пользователя root-доступ (все еще плохая идея, но менее специфична для реализации), вы можете использовать getuid для проверки uid 0 и, следовательно, root.