鉴于世风不古,在讲正题前,先假设个场景:小明在马路边捡到一分钱,不知道怎么办,就打电话给114,114把电话转接给了警察局,把小明的情况告诉了警察叔叔,由警察叔叔来处理。
进入正题:解释器文件就是114,而警察局警察叔叔就是指定的解释器。这样做的好处就是可以在解释器文件里指定解释器,来对相应的场景情况进行相应的处理,比如若我是114,我可以选择把小明的钱直接密下。(这追求。。。)。
除了系统中在bin目录下设定好的解释器,可以自己编写解释器,其实就是程序。具体实例和步骤如下:
本例所有程序在自定义的工作目录 /home/wwe/code/interpreter下完成。
1.编写自己的解释器:
1.1 文件名为echoarg.c
#include <stdio.h> //function: print out all the args int main(int argc,char *argv[]) { int i; for(i = 0; i < argc;i++) printf("arg[%d]: %s\n",i,argv[i]); return 0; }
1.2 编译:
1.3 将生成的a.out更名为 echoarg,得到了自己定义的解释器。
2.创建解释器文件--interp
2.1 新建文本文档,命名为interp
2.2 在文件中写入解释器所在的位置
#! /home/wwe/code/interpreter/echoarg
2.3 查看、更改权限:
[root@localhost interpreter]# ll -rw------- 1 root root 37 Aug 23 00:54 interp
可见没有执行权限,更改。
[root@localhost interpreter]# chmod 777 interp1 -rwxrwxrwx 1 root root 38 Aug 23 00:27 interp
3.测试:新建文件interpreter.c
#include <unistd.h> #include <stdio.h> int main() { pid_t pid; int status; status = execl("/home/wwe/code/interpreter/interp1","interp1","myarg1","myarg2",(char*)0); if(status < 0) printf("execl_err: %d\n",status); return 1; }
结果:
[root@localhost interpreter]# ./a.out arg[0]: /home/wwe/code/interpreter/echoarg arg[1]: /home/wwe/code/interpreter/interp1 arg[2]: myarg1 arg[3]: myarg2
在解释器文件中加入可选参数:
#! /home/wwe/code/interpreter/echoarg "I come from interp1 file"
结果:
[root@localhost interpreter]# ./a.out arg[0]: /home/wwe/code/interpreter/echoarg arg[1]: "I come from interp1 file" arg[2]: /home/wwe/code/interpreter/interp1 arg[3]: myarg1 arg[4]: myarg2