21xrx.com
2025-03-21 20:40:02 Friday
文章检索 我的文章 写文章
Linux C++ 中执行 Shell 的方法
2023-07-11 11:21:52 深夜i     168     0
Linux C++ Shell 执行 方法

在 Linux C++ 程序中执行 Shell 命令是很常见的需求,可以通过以下几种方法实现:

1. 使用 system() 函数

system() 函数可以执行任何 Shell 命令,它的声明如下:

int system(const char *command);

使用该函数,只需要在程序中调用 system() 函数,并将要执行的 Shell 命令作为参数传入即可。例如:

int ret = system("ls -l");

这条命令会执行 ls -l 命令,并将返回值赋值给 ret 变量。如果命令执行成功,返回值为 0。如果失败,则返回该命令的错误码。

system() 函数具有一定的安全隐患,因为它会将用户传递的命令字符串交给 Shell 去执行,如果命令字符串中包含了一些非法字符,可能会带来危险。

2. 使用 popen() 函数

popen() 函数可以执行一个 Shell 命令,并返回命令的输出结果,可以用来实现一些简单的任务。它的声明如下:

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

使用该函数,只需要在程序中调用 popen() 函数,并将要执行的 Shell 命令和模式类型作为参数传入即可。例如:

FILE *fp = popen("ls -l", "r");
char buf[BUFSIZ];
while(fgets(buf, BUFSIZ, fp) != NULL){
  printf("%s", buf);
}
pclose(fp);

这段代码会执行 ls -l 命令,并将命令的输出结果逐行读取并打印到终端上。

3. 使用 fork() 和 exec() 系列函数

fork() 函数可以创建一个新进程,然后通过 exec() 系列函数在子进程中执行一个新的程序。这种方式比较复杂,需要手动创建进程和调用 exec() 函数。

首先需要使用 fork() 函数创建一个新进程:

#include <sys/types.h>
#include <unistd.h>
pid_t pid = fork();
if(pid == 0){
  // 子进程
  // 调用 exec() 函数执行新程序
  execl("/bin/ls", "ls", "-l", NULL);
}else if(pid > 0){
  // 父进程
  // 等待子进程结束
  waitpid(pid, NULL, 0);
}else{
  // fork() 函数出错
}

以上代码会创建一个新进程,并在子进程中执行 ls -l 命令。其中 execl() 函数的参数依次是程序的路径、程序的名称、程序的参数列表,最后一个参数是 NULL。

总结

Linux C++ 中执行 Shell 命令可以使用 system() 函数、popen() 函数和 fork() 和 exec() 系列函数。每种方式都有它的应用场景和优缺点,需要根据具体需求来选择。同时需要注意避免安全隐患,确保程序的稳定性和安全性。

  
  
下一篇: C++ 图论算法库

评论区