21xrx.com
2024-11-05 14:52:17 Tuesday
登录
文章检索 我的文章 写文章
Linux C++ 中执行 Shell 的方法
2023-07-11 11:21:52 深夜i     --     --
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++ 图论算法库

评论区

{{item['qq_nickname']}}
()
回复
回复