标签:const 笔记 char 参数 ls Linux 进程 execv 交互
一、常用函数
fork():
通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
fork()函数拥有多个返回值,
如果创建子进程失败,那么返回负值
如果是子进程,那么返回值为0;(父子进程是相对而言的)
如果是父进程,那么返回创建的子进程的pid
exce函数族:
当进程调用exec系列函数中的任一个时,该进程用户空间资源(正文、数据、堆、栈)完全由新程序替代 ,例如用fork()创建一个子进程,再对这个子进程使用exce函数族,用新程序将它替代
使用与命名方法:
- 使用与判断举例:
//execv()
if (fork() == 0){//子进程
char * execv_str[] = {"newprocess", "ls",NULL};//newprocess我放在主文件夹下,程序名字为newprocess
if (execv("newprocess",execv_str) <0 ){//使用execv函数,用新进程取代子进程,同时判断是否成功(>=0),如果成功,则直接执行新进程
printf("error!\n");
exit(0);
}
}else{
//parent process
wait(&childpid);
printf("execv done\n\n");
}
- excel
int execl(const char* path,const char* arg,...);
例子 : execl("/bin/ls","ls","-l","/home",(char*)0);
第一个参数表示execl要执行的程序,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
- execle
int execle(const char* path,const char* arg,...);
例子:execle("/bin/ls","ls","-l","/home",(char*)0,env);
execle用来执行参数path代表的程序,第二个及以后的参数代表执行文件时传入参数列表,最后一个参数必须指向一个新的环境变量数组,即新执行程序的环境变量。
- execlp
int execlp(const char* file,const char* arg,...);
例子:execlp("ls","ls","-l","/home",(char*)0);
execlp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
- execv
int execv(const char* path,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
execv("/bin/ls",argv);
execv函数执行path路径下的程序,第二个参数为数组指针维护的程序参数列表,该数组的最后一个成员必须为NULL.
- execvp
int execvp(const char* file,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
execv("ls",argv);
execvp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
- 总结:
e后续, 参数必须带环境变量部分, 环境变零部分参数会成为执行exec函数期间的环境变量, 比较少用
l 后续, 命令参数部分必须以"," 相隔, 最后1个命令参数必须是NULL
v 后续, 命令参数部分必须是1个以NULL结尾的字符串指针数组的头部指针. 例如char * pstr就是1个字符串的指针, char * pstr[] 就是数组了, 分别指向各个字符串.
p后续, 执行文件部分可以不带路径, exec函数会在$PATH中找
标签:const,笔记,char,参数,ls,Linux,进程,execv,交互 来源: https://www.cnblogs.com/huakui/p/11519338.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。