当前位置:  技术问答>linux和unix

C实现shell

    来源: 互联网  发布时间:2016-08-10

    本文导语:  本帖最后由 qinguan0619 于 2010-03-13 13:05:11 编辑 看到一个标准C实现shell功能的程序,下面加粗的一句代码看不懂。 我查看了man手册,getenv函数是用来取得“BSPROMPT”环境变量的名称。 这个环境变量是自己设的还是系统的...

本帖最后由 qinguan0619 于 2010-03-13 13:05:11 编辑
看到一个标准C实现shell功能的程序,下面加粗的一句代码看不懂。
我查看了man手册,getenv函数是用来取得“BSPROMPT”环境变量的名称。
这个环境变量是自己设的还是系统的?因为我找不到有关BSPORMPT相关的信息。


int main(int argc, char **argv) {
    char cmd[80]; // Input command area.
    char *source = NULL; // Where commands to send to parser come from.
    char *arg[21]; // Arg list.
    int statval; // Exec status value.
    char *prompt="baby:"; // Command prompt, with default.
    char *test_env; // getenv return value.
    int numargs; // parse_cmd return value.

    if (test_env=getenv("BSPROMPT"))
        prompt=test_env;   
 while (1) {
        // See if we need to get a line of input.
        if(source == NULL) {
            printf(prompt);
            source = gets(cmd);
            if(source == NULL) exit(0);  // gets rtns NULL at EOF.
        }

        // Get the next command.
        source = parse_cmd(source, arg, &numargs);
        if (numargs == 0) continue;

        // Exit command
        if (!strcmp(arg[0],"exit")) {
            if (numargs==1)
                exit(0);
            if (numargs==2) {
                if (sscanf(arg[1],"%d",&statval)!=1) {
                    fprintf(stderr,"%s: exit requires an "
                            "integer status coden",
                            argv[0]);
                    continue;
                }
                exit(statval);
            }
            fprintf(stderr,"%s: exit takes one "
                    "optional parameter -integer statusn",
                    argv[0]);
            continue;
        }

        // Run it.
        if (fork()==0) {
            execvp(arg[0],arg);
            fprintf(stderr,"%s: EXEC of %s failed: %sn",
                    argv[0],arg[0],strerror(errno));
            exit(1);
        }
        wait(&statval);
        if (WIFEXITED(statval)) {
            if (WEXITSTATUS(statval))
                fprintf(stderr,"%s: child exited with "
                        "status %dn", argv[0],
                        WEXITSTATUS(statval));
        } else {
            fprintf(stderr,"%s: child died unexpectedlyn",
                    argv[0]);
        }
    }
}


|
BSPROMPT 是 Bash Prompt 的缩写?呵呵,看来像是让用户自己设置提示符的。
呵呵,不过是个提示符吗,这句去掉好像也不影响大局,你注释掉看看。

另外环境变量可以是全局也可以是用户的,只要有就好,
比如在你用户根目录下.bashrc中增加就好了(bash)

|
用户设定的
貌似
BSPROMPT 只是为了在source为NULL时,打印出设定的信息而已
无伤大雅的


    
 
 

您可能感兴趣的文章:

  • 请问什么是shell编程?一般都用shell编程实现什么?
  • 如何用c shell实现让一个a.exe在后台运行,请给出shell代码
  • 编一个模拟shell实现的程序,怎么实现输入输出重定向?谢谢
  • 用shell调用api接口能实现吗?100分就是你的了
  • 请问shell能实现注册的功能吗?
  • 用shell命令来实现改变文件的icon
  • Linux shell 可以实现连接数据库吗?
  • bash shell 如何实现删除文件中的各行字符呢?
  • 如何用shell实现向文件删除或添加一行信息
  • 请教一下,如何用shell 编程实现删除超过一定时间以前的文件?
  • 如何用shell程序实现一个监控程序(内详)
  • 用shell实现scp,如何将密码传给相应的指令?
  • 如何编程实现(不用shell命令)修改文件的时间
  • 急急急!!!!!!用B shell如何实现截取变量的子串?
  • 用SHELL脚本实现?
  • 如何使用shell文件实现linux环境下的挂载功能,具体代码!!
  • shell 读取xml的实现
  • shell脚本如何实现下面的功能
  • UNIX SHELL实现su用户切换功能
  • 怎么在每行数据后加 一个 词 (shell 实现)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现
  • flash AS3反射实现(describeType和getDefinitionByName)
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • boost unordered_map和std::list相结合的实现LRU算法
  • 求在freebsd+Squid下实现pc上网的透明代理的实现方法!给出具体配置方法的高分谢!
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • linux下如实现与window下的驱动器实现文件共享??
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • qt如何实现:操作键盘实现数据的滚动?
  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • 我想用APPLET实现读取客户端的图片文件,该如何实现?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • PING是用TCP,还是用UDP来实现的?或是采用其它协议实现的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3