linux下编写who命令

不及物动词 其他 10

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在Linux下编写”who”命令,我们需要使用C语言进行编程。以下是一个简单的示例代码:

    “`c
    #include
    #include
    #include
    #include
    #include

    void show_info(struct utmp* utbufp) {
    printf(“%-8.8s “, utbufp->ut_user);
    printf(“%-8.8s “, utbufp->ut_line);

    time_t t = utbufp->ut_tv.tv_sec;
    printf(“%12.12s “, ctime(&t) + 4);

    printf(“(%s)\n”, utbufp->ut_host);
    }

    int main() {
    int utmpfd;
    struct utmp current_record;
    int reclen = sizeof(current_record);

    if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) {
    perror(UTMP_FILE);
    exit(1);
    }

    while (read(utmpfd, &current_record, reclen) == reclen) {
    show_info(&current_record);
    }

    close(utmpfd);
    return 0;
    }
    “`

    说明:
    1. 通过`#include`包含必要的头文件。
    2. `show_info`函数用于显示登录用户的信息,包括用户名、终端设备、登录时间和登录来源(主机)。
    3. `main`函数打开`/var/run/utmp`文件,遍历其记录并调用`show_info`函数打印登录信息。
    4. 编译并运行这个程序,你将获得类似于”who”命令的输出。

    请注意,这只是一个简单的示例,并不考虑一些特殊情况,如登录用户数量超过utmp文件能够存储的范围等。如果需要更复杂和完善的实现,请参考更详细的文档和相关资源。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Linux操作系统下,编写一个类似于who命令的程序可以通过以下步骤完成:

    1. 导入必要的头文件
    在编写程序之前,首先需要导入相应的头文件。对于who命令来说,需要导入 ``、``、``和``等头文件。这些头文件包含了相关的库函数和定义。

    2. 定义所需的结构体和全局变量
    who命令中需要用到utmp记录,它包含了关于登录用户和系统启动时间的信息。在程序开头处定义一个utmp结构体的变量,以及其他可能需要的全局变量。

    3. 打开utmp文件
    使用`utmpname`函数设置utmp文件路径,一般为`/var/run/utmp`或`/var/log/wtmp`。然后使用`utmp_open`函数打开utmp文件,并进行错误检查。

    4. 读取utmp记录
    使用`utmp_next`函数读取utmp文件中的每条记录,直到文件结束。每读取一条utmp记录,就可以从中提取出相应的信息,如登录用户名、登录时间等。

    5. 输出所需的信息
    对于每条utmp记录,根据需要选择性地输出信息。可以将信息打印到终端,或者写入文件中。

    6. 关闭utmp文件
    使用`utmp_close`函数关闭utmp文件。

    7. 编译和运行程序
    将程序源代码保存为.c文件,使用gcc编译器将其编译为可执行文件。然后运行可执行文件,即可得到类似于who命令的输出信息。

    需要注意的是,以上仅是一个编写who命令的简单示例。实际编写时可能还需要考虑其他因素,如处理异常情况、增加命令选项等。此外,还可以参考系统自带的who命令源码,了解更多细节和实现方式。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Linux系统中,可以使用编程语言C来编写自定义的who命令。下面将介绍如何编写一个简单的who命令。

    1. 创建一个新的C源文件,命名为”mywho.c”。可以使用任何文本编辑器,在终端中输入以下命令创建并打开该文件:

    “`shell
    touch mywho.c
    vi mywho.c
    “`

    2. 在mywho.c文件中输入如下代码:

    “`c
    #include
    #include
    #include
    #include
    #include

    #define SHOWHOST

    void show_info(struct utmp *utbufp)
    {
    if (utbufp->ut_type != USER_PROCESS)
    return;

    printf(“%-8.8s”, utbufp->ut_name); // 用户名
    printf(” “);
    printf(“%-8.8s”, utbufp->ut_line); // 终端名称
    printf(” “);
    printf(“%12.12s”, ctime(&(utbufp->ut_tv.tv_sec))); // 登录时间
    printf(” “);
    #ifdef SHOWHOST
    printf(“(%s)”, utbufp->ut_host); // 登录主机名
    #endif
    printf(“\n”);
    }

    int main()
    {
    struct utmp current_record;
    int utmpfd;
    int reclen = sizeof(current_record);

    if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1)
    {
    perror(UTMP_FILE);
    exit(1);
    }

    while (read(utmpfd, &current_record, reclen) == reclen)
    show_info(&current_record);

    close(utmpfd);
    return 0;
    }
    “`

    3. 保存并关闭文件。

    4. 编译并生成可执行文件。在终端中输入以下命令:

    “`shell
    gcc -o mywho mywho.c
    “`

    5. 当前目录下会生成名为”mywho”的可执行文件。

    6. 运行可执行文件。在终端中输入以下命令:

    “`shell
    ./mywho
    “`

    该命令将显示当前登录到系统的用户信息,包括用户名、终端名称、登录时间和登录主机名(如果有)。

    注意:在编写和编译代码时,请确保系统已安装了utmp.h头文件和相关库。如果没有,请先安装它们。

    以上就是在Linux下编写一个简单的who命令的步骤。希望对你有帮助!

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部