shell实现(二) 打印提示信息的实现

提示信息的内容

提示信息包括当前的工作目录,操作的用户,是否为根用户等信息的呈现…
没有什么好说的,就是几行很简单的代码,难度相当于输出一个hello world !!!

#include "lshell.h"
/*************************************
uid_t getuid();//获得当期用户的用户id
void getcwd( char* , int ) //获取但你当前工作目录
passwd* getwuid ( uid_t id )//通过用户id获得用户信息
*************************************/

#define MAX_LEN 1024

void make_prompt ( char* prompt )
{
    char host_name[MAX_LEN];//用户信息
    char path_name[MAX_LEN];//当前工作的目录
    struct passwd* pwd = getpwuid (getuid());//通过getpwuid函数借助用户id获得用户信息
    getcwd ( path_name , MAX_LEN );//获得当前的工作目录
    if ( gethostname ( host_name , MAX_LEN ))//如果没有获得当前的用户信息,用unknown替代
        strcpy ( host_name , "unknown" );
    //如果当前工作的目录是当前用户的根目录的上层,那么直接打印
    if ( strlen ( path_name ) < strlen ( pwd->pw_dir ) || strncmp(path_name , pwd->pw_dir , strlen ( pwd->pw_dir)))
        sprintf ( prompt , "[tjullin-shell]@%s:%s:" , host_name , path_name );
    else//如果当前工作的目录是当前用户的根目录的一个子孙,那么用"~"替代当前用户的根目录
        sprintf ( prompt , "[tjullin-shell]@%s:~%s:" , host_name , path_name+strlen(pwd->pw_dir) );
    switch ( getuid() )//通过用户id判断当前用户是否为根用户
    {
        case 0:
            sprintf ( prompt+strlen(prompt) , "#" );
            break;
        default:
            sprintf ( prompt+strlen(prompt) , "$" ); 
            break;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值