c - 如何以编程方式获取登录到 Linux 机器上的用户数?

标签 c linux bash

我想知道是否可以用 C 语言以编程方式获取 Linux 机器上登录的用户数量?我做了一些研究并发现了 utmp.h 但由于并非所有程序都使用 utmp 日志记录,我认为它不够准确。在此先感谢任何愿意提供帮助的人。

编辑:我很抱歉没有更具体,但当我说登录用户时,我指的是通过 shell 登录的任何用户。基本上,当您运行没有命令行参数的 who 命令时,您会得到什么。

最佳答案

#include <utmp.h>
#include <err.h>

#define NAME_WIDTH  8

    FILE *ufp;
    int numberOfUsers = 0;
    struct utmp usr;
    ufp = file(_PATH_UTMP);
    while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1) {
    if (*usr.ut_name && *usr.ut_line && *usr.ut_line != '~') {
         numberOfUsers++;
        }
    }

    FILE *file(char *name)
    {
        FILE *ufp;

        if (!(ufp = fopen(name, "r"))) {
            err(1, "%s", name);
        }
        return(ufp);
    }

在玩了几天 utmp 之后,我弄明白了。感谢您的帮助。

关于c - 如何以编程方式获取登录到 Linux 机器上的用户数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219695/

相关文章:

c - 如何在Linux中读取和更改内存中的值?

linux - 如何获取 perf stat 列出所有可能的事件

node.js - 无法安装 node-sass 因此无法安装 gulp-sass

linux - 两台服务器之间的远程 rsync 管道损坏

c - 编译 GCC-7.2 时出错

c - 在乒乓测试中使用 pthread 条件变量

linux - 程序中仅包含最小的 Qt 库

bash - 以(半)自动方式设置 FLASK_APP

bash - 删除除一个(或多个)之外的所有文件夹

c - 如何在代码中为文件大小分配软限制