system与excel族函数区别

1.system

cpp 复制代码
#include<stdlib.h>
int system(const char *command);

comand是命令的路径,一般我们用绝对路径

system函数会创建新的进程,新的进程执行完返回原来的进程,原来的进程则继续执行后面的代码段。

如我们创建一个sys.cpp文件,在其中去执行另一个sys1可执行文件

cpp 复制代码
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    std::cout<<"sys excute"<<getpid()<<std::endl;
    system("./sys1");
    std::cout<<"sys success"<<std::endl;
    return 0;
}

同目录下创建一个sys1.cpp文件,然后将其编译链接为可执行文件

cpp 复制代码
#include<iostream>
#include<unistd.h>
int main()
{
    std::cout<<"sys1 excute"<<getpid()<<std::endl;
    std::cout<<"sys1 termined"<<std::endl;
    return 0;
}

可以看出先执行完sys1后又返回原来的进程执行了

2.execl

cpp 复制代码
#include <unistd.h>
 
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

一般来说,path为指令的路径,arg为指令的参数

excel不创建新的进程,只是从原来进程去执行别的任务,执行完不会返回。

cpp 复制代码
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    std::cout<<"sys excute"<<getpid()<<std::endl;
    execl("./sys1","sys1",0);
    std::cout<<"sys success"<<std::endl;
    return 0;
}

可以看到执行完sys1,就结束了

相关推荐
小白探索世界欧耶!~3 分钟前
【踩坑】GitHub Actions 运行的 Linux 环境中,文件名是大小写敏感的
linux·运维·服务器·前端·vue.js·笔记·github
lyingcloud5 分钟前
debian系统中文输入法失效解决
linux·运维·debian
Simon—欧阳7 分钟前
C#异步方法返回Task<T>的同步调用
开发语言·前端·javascript
michaelzhouh17 分钟前
php调用大模型应用接口实现流式输出以及数据过滤
开发语言·php·php调用大模型api流式输出
小郝 小郝18 分钟前
【C语言】浮点数在内存的储存
c语言·开发语言
whoarethenext22 分钟前
基于libevent写一个服务器(附带源码)
linux·运维·服务器·c++·后端
佩奇的技术笔记29 分钟前
Java学习手册:JVM、JRE和JDK的关系
java·开发语言·jvm
Code额1 小时前
ECMAScript 7~10 新特性
开发语言·javascript·ecmascript
master cat1 小时前
Ubuntu下载火狐浏览器
linux·ubuntu·腾讯云
zyx没烦恼1 小时前
Linux 多线程
linux·运维·服务器·开发语言·c++