2014-09-02 3 views
2

Я пытаюсь получить список текущих зарегистрированных пользователей, используя функцию getutxent(), определенную вяблока. Используемый мной тестовый код:OSX Yosemite getutxent() возвращает одного и того же пользователя дважды

#include <stdio.h> 
#include <utmpx.h> 

int main(void) { 
    setutxent(); 
    while (1) { 
     struct utmpx *user_info = getutxent(); 
     if (user_info == NULL) break; 
     printf("%s\n", user_info->ut_user); 
    } 
    return 0; 
} 

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

myusername 
myusername 

Почему мое имя пользователя появляется дважды? Это произойдет, если бы было несколько пользователей?

Подробная информация о моем макинтоше: enter image description here

+1

Yosemite - это всего лишь бета-продукт. Это может быть известная проблема, которая исправлена ​​в финальной версии. Я предлагаю просить об этом на форумах разработчиков Apple: https://devforums.apple.com/ – TheDarkKnight

+1

@ Merlin069 будет делать – jamespick

ответ

3

getutxent() не сообщают пользователи, он сообщает сессии.

Если у вас открыто несколько сеансов (например, сеанс терминала), он будет занесен в базу данных учетных записей пользователей и будет восстановлен вслепую. Вы можете проверить это, проверив элементы ut_id и ud_line структуры utmpx. Они должны быть разными для каждого экземпляра, где ut_user - это то же самое, поскольку они обмениваются отдельными процессами (и терминалами, если вы используете это).

Смежные вопросы