c语言代替linux命令who

worktile 其他 42

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    C语言无法完全代替Linux命令”who”。

    “who”命令是Linux系统中用于显示当前登录系统用户的命令,它能够提供用户登录的详细信息,如用户名、登录时间、登录终端等。而C语言是一种编程语言,用于开发软件和应用程序。

    虽然C语言可以通过编写程序来获取一些系统信息,但是要完全代替”who”命令需要涉及到与Linux系统相关的API函数和系统调用。但由于Linux系统的复杂性和多样性,编写一个完整的”who”命令的功能需要对Linux操作系统的内部结构和细节有深入的了解。

    在C语言中可以使用一些相关的系统调用和库函数来获取一些用户登录信息,比如使用”getutxent”函数读取utmpx文件来获取用户登录记录,然后再根据需要进行解析和显示。但这只是”who”命令的一小部分功能,并不能完全代替。

    总的来说,要使用C语言完全代替”who”命令需要进行复杂的系统编程和深入了解Linux操作系统的内部结构。对于大部分用户来说,直接使用系统命令”who”更加方便和简单。

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

    C语言可以代替Linux命令”who”来实现相同的功能。下面是一些使用C语言编写的代码示例,演示如何获取当前登录用户的信息:

    1. 使用getutxent函数获取登录用户信息:

    “`c
    #include
    #include

    int main() {
    struct utmpx *ut;
    setutxent(); // 打开utmpx文件
    while ((ut = getutxent()) != NULL) {
    if (ut->ut_type == USER_PROCESS) {
    printf(“%s\n”, ut->ut_user);
    }
    }
    endutxent(); // 关闭utmpx文件
    return 0;
    }
    “`

    2. 使用utmp.h头文件获取登录用户信息:

    “`c
    #include
    #include
    #include
    #include

    int main() {
    struct utmp ut;
    int fd;
    fd = open(“/var/run/utmp”, O_RDONLY);
    while (read(fd, &ut, sizeof(ut)) == sizeof(ut)) {
    if (ut.ut_type == USER_PROCESS) {
    printf(“%s\n”, ut.ut_user);
    }
    }
    close(fd);
    return 0;
    }
    “`

    这些代码示例使用的是C语言中与登录用户信息相关的库函数和头文件。第一个示例使用了getutxent函数和utmpx.h头文件,而第二个示例使用了utmp.h头文件。

    值得注意的是,这些示例代码需要在Linux系统中编译和运行。你可以使用gcc编译器来编译这些代码,例如使用以下命令来编译第一个示例代码:

    “`bash
    gcc -o who_c who_c.c
    “`

    编译完成后,你可以运行生成的可执行文件来获取当前登录用户的信息。

    这是使用C语言代替Linux命令”who”获取登录用户信息的简单示例。通过使用这些函数和头文件,你可以在C语言中编写更复杂的程序来处理和展示登录用户的相关信息。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要使用C语言代替Linux命令”who”,我们可以使用C语言的系统调用函数来实现。下面是一个简单的实现示例:

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

    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) {
    if (current_record.ut_type == USER_PROCESS) {
    printf(“%-8.8s “, current_record.ut_name);
    printf(“%-8.8s “, current_record.ut_line);
    printf(“%12.12s “, ctime((time_t *)&current_record.ut_time) + 4);
    printf(“\n”);
    }
    }

    close(utmpfd);
    return 0;
    }
    “`

    上述代码使用了``头文件中提供的定义和函数来读取`/var/run/utmp`文件中的用户信息。首先,我们打开`/var/run/utmp`文件并检查是否打开成功。然后,我们循环读取文件中的记录,检查记录的类型是否为`USER_PROCESS`,如果是,则打印出用户名、终端号和登录时间。循环结束后,我们关闭文件并返回。

    使用gcc编译上述代码:

    “`
    gcc -o mywho mywho.c
    “`

    然后运行编译后的可执行文件`mywho`即可代替`who`命令输出当前登录用户信息。

    请注意,这只是一个简单的示例,实际上`who`命令可能会有更复杂的功能和选项。如果需要完全代替`who`命令的所有功能,可能需要更多的代码和处理。

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

400-800-1024

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

分享本页
返回顶部