在CLUI(CommandLineUserInterface,对应GUI)模式下,用户通过shell与系统进行交互。shell也是一个程序,它与其他程序最大的区别在于它的目的是执行其他程序,而不是从事计算、绘图、存储等具体工作。分析一下shell的工作原理就会有助于破解shell的神秘面纱,更好地掌握shell命令。下图展示了shell的基本流程。流行的bash、csh、zsh等比这复杂的多,考虑了很多细节。上图是ls命令的执行过程,下面简单分析一下:1、shell不断询问是否有键盘输入。用户以enter结束键盘输入后,shell程序以空格为分隔符得到“ls”、“-l”、“*.c”三个字符串。2、当shell发现第三个字符串中包含“*”通配符时,会在当前路径(或指定路径)中查找满足通配符的文件。有两个文件bar.c和foo.c,然后展开成四个字符串{"ls","-l","bar.c","foo.c"},存放在二维字符中argv数组,并将argc赋给4。3.然后shell搜索全局变量PATH保存的路径,寻找名为“ls”的命令。如果存在,fork()一个子进程,调用exec()加载运行ls命令。ls的main(intargc,string**argv)函数的参数是从shell中获取的。如果不存在,将提示用户“commandnotfound”。4、ls程序执行后,会分析argc和argv,“-l”表示这是一个选项开关,表示用户想要获取文件的详细信息,保存这个开关值,以便可以在最终输出时选择信息的格式。5、ls执行完预定步骤后,退出并返回退出码。如果成功则返回0,否则根据不同的错误返回不同的非零数。6.shell获取成功退出码后,继续等待用户输入。如此循环往复。转:http://blog.csdn.net/hjx5200/...
