调用格式: 〈逻辑型〉 运行 (文本型 欲运行的命令行,逻辑型 是否等待程序运行完毕,[整数型 被运行程序窗口显示方式]) - 系统核心支持库->系统处理
英文名称:run
本命令运行指定的可执行文件或者外部命令。如果成功,返回真,否则返回假。本命令为初级命令。
参数<1>的名称为“欲运行的命令行”,类型为“文本型(text)”。
参数<2>的名称为“是否等待程序运行完毕”,类型为“逻辑型(bool)”,初始值为“假”。
参数<3>的名称为“被运行程序窗口显示方式”,类型为“整数型(int)”,可以被省略。参数值可以为以下常量之一:1、#隐藏窗口; 2、#普通激活; 3、#最小化激活; 4、#最大化激活; 5、#普通不激活; 6、#最小化不激活。如果省略本参数,默认为“普通激活”方式。
*** 作系统需求: Windows、Linux
1,如果同时打开静态库和运行程序调用,调式模式下,可以进入静态库的内部函数进行调试;2,其实不用把shadow build取消勾选;文件输出的文件就是lib***.a的文件,可以在shadow目录里面很方便找到;
3,新的项目使用的时候,就是让其能找到lib***.a,和该库的h头文件;
4,QT的编译输出的静态库名字会自动在项目名字前加lib三个字,后缀是.a;
5, QT5.15的编程的工程与该例子中缺少“需要什么模块就添加什么”的部分;
教科书里的Linux代码例子都已作古,所以看到的代码不能当真,领会意思就行了比如以前的init进程的启动代码
execve(init_filename,argv_init,envp_init)
现在改为
static void run_init_process(char *init_filename)
{
argv_init[0] = init_filename
kernel_execve(init_filename, argv_init, envp_init)
}
好的,聪明人就发现,linux内核中调用用户空间的程序可以使用init这样的方式,调用 kernel_execve
不过内核还是提供了更好的辅助接口call_usermodehelper,自然最后也是调用kernel_execve
调用特定的内核函数(系统调用)是 GNU/Linux 中软件开发的原本就有的组成部分。但如果方向反过来呢,内核空间调用用户空间?确实有一些有这种特性的应用程序需要每天使用。例如,当内核找到一个设备,这时需要加载某个模块,进程如何处理?动态模块加载在内核通过 usermode-helper 进程进行。
让我们从探索 usermode-helper 应用程序编程接口(API)以及在内核中使用的例子开始。 然后,使用 API 构造一个示例应用程序,以便更好地理解其工作原理与局限。
usermode-helper API
usermode-helper API 是个很简单的 API,其选项为用户熟知。例如,要创建一个用户空间进程,通常只要设置名称为 executable,选项都为 executable,以及一组环境变量(指向 execve 主页)。创建内核进程也是一样。但由于创建内核空间进程,还需要设置一些额外选项。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)