《unix环境编程》解释器文件

时间:2021-07-17 17:06:09

书上介绍的,是否一定需要解释器文件,说的很好。

解释器确实使用户得到效率方面的好处,其代价是内核的额外开销,因为识别解释器文件的是内核。

解释器文件的必要性:

1. 有些程序是用脚本编写的,解释器文件可以将这一事实隐藏起来,也就是说解释器文件本身是个程序,可以用exec装入执行。

2. 解释器脚本在效率方面也提供了好处。例如一个awk脚本,将其包装在shell脚本中:

awk 'BEGIN{

for(i=0; i<ARGC; i++)

printf "ARGV[%d] = %s\n", i, ARGV[i]

exit

}' $*

若用execlp执行此文件,这是一个shell脚本,执行/bin/sh,并以该文件的路径名作为参数,shell为了运行awk程序,会调用fork,exec,wait,因此用一个shell脚本代替解释器脚本需要更多的开销。

这就是说,shell脚本是一种解释器脚本,脚本文件开头添加 #! /bin/sh 就可以把解释器脚本作为shell脚本。

3. 解释器可以使用其他的解释程序运行shell脚本。

解释器文件使代码和脚本可以联系起来,代码可以用exec执行一个脚本文件,这样允许在代码外修改脚本就可以实现代码的不同操作。解释器脚本是一种可修改的可执行程序,但我们没办法修改编译得到可执行文件。