Linux系统下mybash打印信息函数Print_info()的实现

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

}

程序运行截图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值