Вы нацелены на Linux и говорите, что хотите делать то, что делает who
.Если ваше программное обеспечение не будет распространяться или будет лицензировано по лицензии GPL, вы можете просто извлечь из него исходную версию who
, которая работает в вашей системе.
Но это вполне ограничения.Итак, как вы можете найти, с чего начать, не обращаясь к исходному коду?Вы можете получить довольно хорошее представление о том, где искать, запустив nm
в двоичном файле, используя nm `which who`
.who
вызывает очень мало внешних функций (34 под Mac OS X 10.6.4).Функции, которые вы ищете, должны быть среди них.Вероятными кандидатами являются getutxent
, utmpxname
и getpwuid
.Вы можете проверить справочные страницы, чтобы проверить это предположение.
Но сначала, почему бы не попробовать apropos
/ man -k
?Быстрый поиск «пользователи» показывает утилиту users
, которая просто перечисляет вошедших в систему пользователей.(Примечание. Похоже, что это BSDism, поэтому в Linux его может не быть. Быстрый поиск с помощью apropos
для соответствующих инструментов и функций все еще хорошая идея.) users
вызывает еще меньше внешних функций (всего 15),и из них единственная интересная, которая перекрывается интересными функциями, вызываемыми who
, это getutxent
.
Итак, как насчет попытки getutxent
?