一、exec与system的区别
(1) exec是直接用新的进程去代替原来的程序运行,运行完毕之后不回到原先的程序中去。
(2) system是调用shell执行你的命令,system=fork+exec+waitpid,执行完毕之后,回到原先的程序中去。继续执行下面的部分。
总之,如果你用exec调用,首先应该fork一个新的进程,然后exec. 而system不需要你fork新进程,已经封装好了。
https://blog.csdn.net/pzqingchong/article/details/78976508
https://blog.csdn.net/wwang196988/article/details/6748282
二、获取system的返回值和脚本的返回值
system会将fork+exec的结果放在返回值的低8位,将脚本的返回值放在高8位。
建议用系统函数进行转换:shell执行结果的返回值:IFEXITED(status)。脚本的返回值:WEXITSTATUS(status)
https://blog.csdn.net/weixin_39094034/article/details/105809444
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main() { char path[256]={0}; getcwd(path,256); strcat(path,"/mytest"); int status = system(path); printf("system return value =%d, shell return value=%d \n",WIFEXITED(status),WEXITSTATUS(status)); getcwd(path,256); strcat(path,"/mytest 102"); status = system(path); printf("system return value =%d, shell return value=%d \n",WIFEXITED(status),WEXITSTATUS(status)); }
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { if(argc==1)return 100; else return atoi(argv[1]); }
parallels@parallels-Parallels-Virtual-Platform:~/Desktop/LinuxC/System$ ./mySystem raw return value=6400,system return value =1, shell return value=100 raw return value=6600,system return value =1, shell return value=102