linux下编写who命令
-
在Linux下编写”who”命令,我们需要使用C语言进行编程。以下是一个简单的示例代码:
“`c
#include
#include
#include
#include
#includevoid 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, ¤t_record, reclen) == reclen) {
show_info(¤t_record);
}close(utmpfd);
return 0;
}
“`说明:
1. 通过`#include`包含必要的头文件。
2. `show_info`函数用于显示登录用户的信息,包括用户名、终端设备、登录时间和登录来源(主机)。
3. `main`函数打开`/var/run/utmp`文件,遍历其记录并调用`show_info`函数打印登录信息。
4. 编译并运行这个程序,你将获得类似于”who”命令的输出。请注意,这只是一个简单的示例,并不考虑一些特殊情况,如登录用户数量超过utmp文件能够存储的范围等。如果需要更复杂和完善的实现,请参考更详细的文档和相关资源。
2年前 -
在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年前 -
在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, ¤t_record, reclen) == reclen)
show_info(¤t_record);close(utmpfd);
return 0;
}
“`3. 保存并关闭文件。
4. 编译并生成可执行文件。在终端中输入以下命令:
“`shell
gcc -o mywho mywho.c
“`5. 当前目录下会生成名为”mywho”的可执行文件。
6. 运行可执行文件。在终端中输入以下命令:
“`shell
./mywho
“`该命令将显示当前登录到系统的用户信息,包括用户名、终端名称、登录时间和登录主机名(如果有)。
注意:在编写和编译代码时,请确保系统已安装了utmp.h头文件和相关库。如果没有,请先安装它们。
以上就是在Linux下编写一个简单的who命令的步骤。希望对你有帮助!
2年前