Linux系统下mybash打印信息函数Print_info()的实现
mybash:
在Linux系统中,命令的执行一般都是通过bash进程创建一个子进程,然后子进程进行替换,替换成可执行的命令文件。
显示信息:
在Linux下。打开终端一般会显示以下界面。这里面包含了用户信息、主机信息、和当前所在的文件夹(即所在位置信息),首先我们来实现它。
这里的的lx指的就是用户信息。lx-PC指的是主机信息,后面的
/Desktop/Study/mycode/mybash
指的就是当前所在文件夹的位置。
1、怎么获得用户信息呢?
首先我们得获取到用户标识符UID。如果是管理员最后面打印的应该是’#’,如果是普通用户最后面打印的应该是
如上图,因为是普通用户所以在最后面有一个’$’.,这个是每个用户对应的用户标识符UID,我们可以通过函数getuid来获得当前用户的UID
getuid()返回值若为0,则说明是root用户
int id = getuid();
char *s = "$";
if(id == 0)
{
s = "#";
}
最后再通过用户标识符,使用getpwuid函数来获得用户信息。
系统文件passwd中包含了我们的用户账户数据库,里面包含了用户名、加密口令、用户标识符、组标识符、全名、家目录和默认shell。
//使用uid获得用户信息
struct passwd *ptr = getpwuid(id);
/*
passwd结构体中包含了以下成员:
char *pw_name 用户登录名
uid_t pw_uid 用户标识符
gid_t pw_gid 组标识符
char *pw_dir 用户家目录
char *gecos 用户全名
char *shell 用户默认shell
*/
if(ptr == NULL)
{
printf("mybash$ ");
fflush(stdout);
return;
}
2、怎么获取主机名呢?
一般通过gethostname函数来获取主机名
char host[128] = {0};
int res = gethostname(host,128);
if(res == -1)
{
printf("mybash$ ");
fflush(stdout);
return;
}
3、怎么获取当前路径呢?
获取当前目录所在位置一般通过getcwd函数实现。
char dirpath[256] = {0};
getcwd(dirpath,256);
至此我们将打印所需信息的各部分代码都已实现,所以完整的代码如下:
void Printf_info()
{
int id = getuid();//获取用户uid
char *s = "$";
if(id == ROOT)
{
s = "#";
}
//使用uid获得用户信息(包含用户名)
struct passwd *ptr = getpwuid(id);//root:x:0:0:root:/root:/bin/bash
if(ptr == NULL)
{
printf("mybash$ ");
fflush(stdout);
}
//主机名
char host[128] = {0};
int res = gethostname(host,128);
if(res == -1)
{
printf("mybash$ ");
fflush(stdout);
return;
}
//当前目录所在位置
char dirpath[256] = {0};
getcwd(dirpath,256);
printf("[%s@%s %s]%s ",ptr->pw_name,host,dirpath,s);
fflush(stdout);
}
程序运行截图: