原创 什么是解释器文件

2015-4-14 09:14 1226 14 15 分类: MCU/ 嵌入式 文集: Linux笔记

解释器是什么?

是执行解释型语言的程序。

很多语言都是解释型语言,比如JavaPython,因此解释器也有很多种。

执行shell语言的解释器:

/bin/bash

/bin/sh

 

解释器文件是什么?

可以被解释器执行的文件,比如shell脚本。

这是一个非常简单的shell解释器文件(俗称shell脚本):

#!/bin/bash

 

echo "Shell start."

执行它:

[maria@localhost primer-unix]$ ./shell.sh

Shell start.

 

再来一个普通的编译型文件(俗称.c文件)

#include

 

int main(int argc, char *argv[])

{

        printf("Test start.\n");

        return 0;

}

编译并执行它:

[maria@localhost primer-unix]$ gcc test.c -o test

[maria@localhost primer-unix]$ ./test

Test start.

 

那它们有什么区别呢?

当执行解释器文件的时候,并不是执行这个文件本身,而是执行/bin/bash

当执行编译型文件的时候,就是执行文件本身。

 

内核调用exec处理的方式也是由区别的,下面两个exec调用的打印结果也是一样的:

execlp("./test", "", (char *)0);

execlp("./shell.sh", "", (char *)0);

NOTE:执行execlp完毕后会跳出执行它的进程,所以这两个函数需要放置在不同的子进程中,或者写成:

if ((pid = fork()) < 0)

        perror("Cannot fork child 1.");

else if (pid == 0)

        execlp("./test", "", (char *)0);

 

if ((pid = fork()) < 0)

        perror("Cannot fork child 2.");

else if (pid == 0)

        execlp("./shell.sh", "", (char *)0);

 

解释器文件不一定是调用bash,也可以使用任意程序,比如:

#!/home/maria/maria_work/workon_fedora/programs/primer-unix/test 1 2 3

 

echo "Shell start."

如果test里面加入了打印参数列表的功能,那么它的输出结果会是这样:

[maria@localhost primer-unix]$ ./shell.sh a b c

Test start.

argv[0] = /home/maria/maria_work/workon_fedora/programs/primer-unix/test

argv[1] = 1 2 3

argv[2] = ./shell.sh

argv[3] = a

argv[4] = b

argv[5] = c

 

解释器文件的使用方法,比如它的参数列表排列、被exec调用时的特点等等,非常有意思。

It's very interesting!

 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户593939 2015-4-14 22:58

参考和学习了

用户1605975 2013-11-10 22:00

才发现这么好的一个专栏,谢谢博主分享
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,但是由于...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
EE直播间
更多
我要评论
1
14
关闭 站长推荐上一条 /3 下一条