《unix高级环境编程》进程控制——解释器文件
来源:互联网 发布:java短信流程 编辑:程序博客网 时间:2024/05/21 09:01
解释器文件
解释器文件是文本文件,而解析器是可执行的二进制文件。解析器是由解析器文件的第一行指定的,其格式如下:
#! pathname [optional-argument]//pathename 是解释器的绝对路径;//optional-argument 是传递给解析器的参数
内核调用 exec 函数的进程实际执行的并不是该解释器文件,而是该解释器文件的第一行中 pathname 所指定的解释器。注意以下区别:
- 解释器文件: 以#!开头的文本文件。
- 解释器:解释器文件第一行pathname所指定的程序。
首先创建解释器echoarg:解释器echoarg由echoarg.c文件编译而成,echoarg.c文件如下所示,实现功能是显示执行程序的参数列表:
#include "apue.h"/* * 函数功能:显示执行程序的参数列表; */int main(int argc, char *argv[]){ int i = 0; for(i=0;i<argc;i++) printf("argv[%d]: %s\n",i,argv[i]); exit(0);}接着定义解释器文件testintererp(/tmp是工作路径,echoarg是解释器):这里需要注意,我们创建该文件时,是没有执行权限的,必须更改使其具有可执行权限,最简单的更改就是:
chmod 777 testintererp
#! /tmp/echoarg arg最后创建包含exec函数调用的文件test.c,并编译成可执行文件test:
#include "apue.h"#include <sys/wait.h>int main(void){ pid_t pid; if((pid = fork()) < 0) err_sys("fork error"); else if(0 == pid) { if(execl("/tmp/testintererp","testintererp","myarg1","myarg2",(char *)0) < 0) err_sys("execl error"); } if(waitpid(pid,NULL,0) < 0) err_sys("wait error"); exit(0);}执行test文件之后输出结果为:
argv[0]: /tmp/echoargargv[1]: argargv[2]: /tmp/testintererpargv[3]: myarg1argv[4]: myarg2
参考资料:
《UNIX高级环境编程》
0 0
- 《unix高级环境编程》进程控制——解释器文件
- 《unix高级环境编程》进程控制——解释器文件
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- 《unix高级环境编程》进程控制——进程时间
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- 《unix高级环境编程》进程控制——进程时间
- UNIX环境高级编程——进程控制
- 《unix高级环境编程》进程控制——system函数
- 《unix高级环境编程》进程控制——system函数
- Unix高级环境编程—进程控制(一)
- Unix环境高级编程—进程控制(二)
- Unix环境高级编程—进程控制(三)
- 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
- 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
- Android Launcher分析和修改3——Launcher启动和初始化
- 法媒:墨西哥取消中国公司高铁投标
- 插件apk推出,资源释放的问题
- poj3304 Segments
- 还是char* 和char[]
- 《unix高级环境编程》进程控制——解释器文件
- wifi的WPS功能
- 下拉菜单:可快速定义一二级菜单颜色
- STL学习之路之仿函数
- hidden_field_tag and hidden_field
- C#下载网页图片
- SV的边界: x264编码参数解释
- linux下 c语言多文件编译
- 游戏《是男人每天十次》