用c语言代替linux命令who

fiy 其他 11

回复

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

    在C语言中,可以通过使用头文件中的函数和数据类型来代替Linux命令”who”。下面是一个示例代码,展示了如何使用C语言来实现类似功能:

    “`c
    #include
    #include
    #include

    int main() {
    struct utmp *utmp_entry;
    FILE *utmp_file;

    utmp_file = fopen(“/var/run/utmp”, “r”);
    if (utmp_file == NULL) {
    perror(“Failed to open /var/run/utmp”);
    exit(1);
    }

    while ((utmp_entry = getutent()) != NULL) {
    if (utmp_entry->ut_type == USER_PROCESS) {
    printf(“%s\t%s\t%s\t%s\n”, utmp_entry->ut_user, utmp_entry->ut_line, utmp_entry->ut_host, ctime(&(utmp_entry->ut_tv.tv_sec)));
    }
    }

    fclose(utmp_file);

    return 0;
    }
    “`

    上述代码通过打开`/var/run/utmp`文件并读取其中的记录来获取当前登录到系统中的用户信息。然后,它会遍历所有的`utmp`记录,筛选出类型为`USER_PROCESS`的记录,输出相应的用户、终端、主机和登录时间信息。

    请注意,该代码需要以root权限运行,因为`/var/run/utmp`文件的权限通常是只有root用户才能访问。此外,代码中使用的`utmp`数据结构和`getutent()`函数可能在不同的操作系统或编译器中有所不同,你可能需要根据自己的环境进行适当的调整。

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

    C语言是一种高级编程语言,可以用来编写各种应用程序。虽然C语言本身并没有直接提供替代Linux命令”who”功能的函数,但可以通过编写代码来实现类似的功能。以下是一种可能的实现方法:

    1. 包含必要的头文件:

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

    2. 定义main函数和一些辅助函数:

    “`c
    int main(void) {
    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;
    }

    void show_info(struct utmp *record) {
    if (record->ut_type == USER_PROCESS) {
    printf(“%-8.8s “, record->ut_user);
    printf(“%-8.8s “, record->ut_line);
    printf(“%12.12s “, ctime(&(record->ut_tv.tv_sec)) + 4);
    }
    }
    “`

    3. 将上述代码保存为名为”mywho.c”的文件。

    4. 使用gcc编译代码并生成可执行文件:

    “`
    gcc -o mywho mywho.c
    “`

    5. 运行可执行文件:

    “`
    ./mywho
    “`

    上述代码中,我们使用了系统提供的utmp.h头文件来访问UTMP文件,该文件记录了当前登录和运行的用户信息。我们打开UTMP文件(通常为”/var/run/utmp”)并逐条读取记录,然后通过show_info函数打印出相应的用户信息。在这个例子中,我们仅打印出用户名、终端名和登录时间。

    需要注意的是,代码中的UTMP_FILE宏定义了UTMP文件的路径,如果你的系统与之不同,需要根据实际情况进行修改。此外,代码中使用了一些Unix系统相关的函数和结构体,因此可能不能直接在非Unix平台上运行。

    总结起来,我们可以使用C语言编写代码来实现类似于Linux命令”who”的功能。这个例子只是一个基本的示例,你可以根据需要对代码进行修改和扩展。

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

    C语言是一种通用的编程语言,可以编写各种程序,包括执行类似于Linux命令的功能。代替Linux命令”who”可以通过在C语言中使用相关的系统调用和库函数来实现。下面是一个示例程序,演示了如何用C语言实现类似于Linux命令”who”的功能。

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

    void show_info(struct utmp* utbufp);

    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;
    }

    void show_info(struct utmp* utbufp)
    {
    if (utbufp->ut_type == USER_PROCESS)
    {
    printf(“%-8.8s”, utbufp->ut_user); // 用户名
    printf(” “);
    printf(“%-8.8s”, utbufp->ut_line); // 终端名
    printf(” “);
    printf(“%12.12s”, ctime(&(utbufp->ut_tv.tv_sec))); // 登录时间
    printf(” “);
    printf(“(%s)”, utbufp->ut_host); // 登录主机
    printf(“\n”);
    }
    }
    “`

    上述示例中,我们使用了``头文件中提供的结构和函数来读取系统登录信息。程序通过打开`/var/run/utmp`文件,然后逐个读取`utmp`记录,判断其类型是否为`USER_PROCESS`,如果是,则打印相关信息,包括用户名、终端名、登录时间和登录主机。

    需要注意的是,上述代码中使用了`UTMP_FILE`常量,该常量定义了utmp文件的路径,不同Linux发行版的utmp文件路径可能不同,可以根据实际情况进行修改。

    此外,还要注意编译时需要链接`-lutmp`库,可以使用`gcc`编译命令进行编译:

    “`
    gcc who.c -o who -lutmp
    “`

    以上是一个简单的示例程序,用C语言实现了类似于Linux命令”who”的功能。你可以根据实际需求进行更复杂的扩展和改进。

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

400-800-1024

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

分享本页
返回顶部