解释器文件
所有现今的UNIX系统都支持解释器文件(interpreter file)。这种文件是文本文件,其起始行的形式是:
|
|
在感叹号和pathname之间的空格是可选的。最常见的解释器文件以下列行开始:
|
|
pathname通常是绝对路径名,对它不进行什么特殊的处理(不使用PATH进行路径搜索)。对这种文件的识别是由内核作为exec系统调用处理的一部分来完成的。内核使调用exec函数的进程实际执行的并不是该解释器文件,而是在该解释器文件第一行中pathname所指定的文件。一定要将解释器文件(文本文件,它以#!开头)和解释器(由该解释器文件第一行中的pathname指定)区分开来。
示例
execl执行的文件是一个解释器文件时,内核如何处理execl参数及该解释器文件第一行的可选参数。
execinterp.c
|
|
其中testinterp为解释器文件,之前运行老出错,是因为testinterp文件没有可执行权限。
|
|
echoarg.o是echoarg.c的可执行文件,回显每一个命令行参数。
echoarg.c
|
|
输出结果:
|
|
当内核exec解释器时(/home/vrlive/linuxProgram/apueProgram/eight/echoarg.o)时,argv[0]是该解释器的pathname,argv[1]是解释器文件中的可选参数,其余参数是pathname(excel函数pathname参数值/home/vrlive/linuxProgram/apueProgram/eight/testinterp)以及execl的第2个和第3个参数(myarg1、MY ARG2)。调用execl时的argv[1]和argv[2]已右移了两个位置。
注意,内核取execl调用中的pathname而非第一个参数(testinterp),因为一般而言,pathname包含了比第一个参数更多的信息。
后续待补充…