EDA365电子论坛网
标题:
迅为i.MX6ULL终结者进程基础 exec函数族
[打印本页]
作者:
阳阳天
时间:
2021-3-12 15:11
标题:
迅为i.MX6ULL终结者进程基础 exec函数族
用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序,该子进程被新的程序替换,改变地址空间,进程映像和一些属性,但是pid号不变。
- M, g) ^4 o9 t8 H: Q6 _
execve():
) l. I& n" U2 a' ^
#include
4 N; Q% Q* R F( X Q/ G+ b* R
int execve(const char *filename, char *const argv[], char *const envp[]);
, V/ w; j4 \: M) R3 y" |
参数含义:
" H4 F9 C" M0 T2 V
filename:路径名,表示载入进程空间的新程序路径。
8 O2 r; A" Q! p4 j; m
argv[]:命令行参数,argv[0]为命令名。
& n8 o/ \2 Q6 ?& W- n
envp[]:新程序的环境变量。
C2 ~0 Y2 s% Z) A3 ?
返回值:成功时不会返回,使用时不用检查返回值,可通过errno检查。
+ X& @* j) V! l* }5 U# y* g
以下函数都是根据execve实现:
: `6 }5 e5 }9 d# V
int execl(const char *path, const char arg, …/ (char *) NULL */);
% V2 H' b) m, D. B r
int execlp(const char *file, const char arg, …/ (char *) NULL */);
( O( s# M" ^# B; b' i
int execle(const char *path, const char arg, …/, (char *) NULL, char * const envp[] */);
: f/ Q) g* M5 X2 V
int execv(const char *path, char *const argv[]);
/ `2 Y! d$ i/ W4 I: M3 }( H% \' W
int execvp(const char *file, char *const argv[]);
2 f; d7 g2 j% g9 Z5 M$ \6 w8 b
int execvpe(const char *file, char *const argv[],char *const envp[]);
9 k9 b0 A: Q: s0 Q% U9 Y- W
实验代码:
. J7 x/ @4 I. J f1 `/ J7 `
创建子进程,子进程使用execl调用ls查看当前目录下的文件。
; m* y% F5 E4 [9 R: `$ K
exec.c:
- a2 ^" N# H' x) M2 X: F
使用execl调用shell命令查看文件信息。
1 v$ B- X, X3 J: V; `3 w' @6 z
* F0 c9 P& Q4 J3 \! N7 L' b4 Z
0 t. ^ F4 a4 ^4 b0 V' ^4 c* W" Y
执行结果:
# q6 M/ }) J0 J: x1 r$ Q
1 ?. G1 Z8 I) K
Linux
系统基于这些函数实现了“popen”,“system”等函数,这些函数能够直接调用shell等函数。
; U# ^0 g q; z/ h$ S; G
. g! l" f. B4 f4 I: W, p' _/ f
作者:
yin123
时间:
2021-3-15 17:10
exec函数族
作者:
ldezgr
时间:
2021-3-17 09:49
谢谢,努力学习中
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2