博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现一个简单的shell(2)
阅读量:5846 次
发布时间:2019-06-18

本文共 1317 字,大约阅读时间需要 4 分钟。

本文来自博客。

原文链接:

  

  

这是本博客的第一个文章专辑。主要介绍如何用 C 语言基于系统来实现一个简单,DIY 一个。通过自己编程实现一个下的,可以使得个人对进程的概念、进程的通信和的运行的理解更加的深刻。还会大大增加个人学习的成就感,提供学习兴趣。

这一个文章专辑被命名为 ,这也是作者所实现的的名称,已经开源放到了 GitHub: 上,感兴趣的读者可以自行前去查看下载,也欢迎对该项目进行星标、提出改善建议、或者自行 fork 之后改善。

 

这是 StupidShell 专辑本章里的第二篇文章,主要介绍内建命令和外部命令,以及外部命令的实现方法。

    

内部命令

内部命令实际上是程序本身的一部分,通常都是一些比较简单的系统命令。这些命令所实现的功能与所做工作都是由程序本身来完成的,也就是在 shell 程序的源码里面实现的,其执行速度要比外部命令快很多,因为执行内部命令时,shell 无需创建新的进程产生多余的开销。常见的外部命令有:

exitcdecho

  

外部命令

外部命令区别于内建命令,通常是一些功能较为强大、复杂的命令。它由 shell 分析然后通过内核 API 创建新的进程,在新的进程中执行,在新的进程中所执行的代码是不属于 shell 的,所以在 shell 加载时并不随之一起被加载到内存中,而是在外部命令执行时才将其调入内存中。

例如,命令 ls ,它是一个列出当前工作目录下所有文件和文件夹的命令,但是实际上 ls 本身就是一个可执行二级制程序文件,通常存放在系统的/bin 文件夹下。shell 在执行该命令时是先创建一个新的子进程,然后把 ls 的可执行二级制程序文件加载到内存当中执行。常见的下 shell 外部命令有:

lscatmoregrep

   

外部命令的调用方法

外部命令在被调用时通常是通过所提供的 exe 函数族来完成的。exec 函数族的作用是根据指定的文件名和相关参数找到可执行文件,并用它来取代当前进程的内容。换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。

exe 函数族有以下函数:

int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char *const envp[]);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);int execve(const char *path, char *const argv[], char *const envp[]);

 

 

 

本文来自博客。

原文链接:

转载于:https://www.cnblogs.com/second-tomorrow/p/9118819.html

你可能感兴趣的文章
Eclipse RCP 玩转 Spring
查看>>
我的友情链接
查看>>
Nginx的健康检查机制
查看>>
Nginx介绍及企业web服务软件选择
查看>>
计算机书籍备忘
查看>>
esxi虚拟机中系统克隆及迁移的方法
查看>>
Linux必学的62条命令 (4)
查看>>
App_Offline.htm 功能
查看>>
java之旅
查看>>
解决linux虚拟机不能上网的问题
查看>>
恢复Reflector反编译后资源文件的办法
查看>>
HandlerExceptionResolver异常解析器家族揭秘
查看>>
Red Hat Linux4.0下主DNS服务器的搭建
查看>>
https/443安装
查看>>
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>
我的友情链接
查看>>
RHEL6.3 源码安装Puppet
查看>>
我的友情链接
查看>>
mybatis 和 hibernate 区别?
查看>>
初级文件系统管理之一
查看>>