linux下如何运行程序?

linux下如何运行程序?,第1张

运行()中间是你的命令

调用格式: 〈逻辑型〉 运行 (文本型 欲运行的命令行,逻辑型 是否等待程序运行完毕,[整数型 被运行程序窗口显示方式]) - 系统核心支持库->系统处理

英文名称: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 主页)。创建内核进程也是一样。但由于创建内核空间进程,还需要设置一些额外选项。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11942817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存