嵌入式,exec和system函数

有人知道这个在centos中怎么弄吗,使用exec函数族,自己实现一个system()函数。并在程序中调用这个函数,查看效果,请给出详细步骤

可以使用 exec 函数族来实现一个类似于 system 函数的功能。exec 函数族包括多个不同的函数,可以在当前进程中执行一个新的程序,并在执行完新程序后替换原来的进程,例如 execl,execv,execvp 等。

下面是一个简单的实现例子,展示了如何使用 execvp 函数来实现一个 mysystem 函数,并在程序中调用这个函数:

#include <unistd.h>
#include <stdio.h>

// 定义 mysystem 函数,类似于 system 函数
int mysystem(const char* command) {
    // 使用 execvp 函数来执行命令
    return execvp(command, NULL);
}

int main() {
    // 调用 mysystem 函数来执行命令
    int ret = mysystem("ls -l");

    // 打印执行结果
    printf("mysystem returned: %d\n", ret);

    return 0;
}

在上面的代码中,我们定义了一个 mysystem 函数,该函数使用 execvp 函数来执行传入的命令,并返回执行结果。在 main 函数中,我们调用了 mysystem 函数来执行 ls -l 命令,并打印执行结果。

如果要在 CentOS 中运行上面的代码,可以使用下面的命令来编译和运行:

gcc mysystem.c -o mysystem
./mysystem

在编译和运行完成后,可以看到程序执行了 ls -l 命令,并打印出了执行结果。

需要注意的是,上面的代码仅提供了一个实现的示例,实际上 exec 函数族中的每个函数都有不同的参数和用法,使用时需要根据实际情况来选择合适的函数。另外,exec 函数族的函数在执行完新程序后不会返回,如果要获取执行结果,可以使用另外一种方式,例如使用 popen 函数来执行命令并获取结果。

望采纳


可以使用 exec 函数族来实现 system() 函数的功能。例如,可以使用 execl 函数来执行系统命令,如下所示:

#include <unistd.h>

int main() {
  execl("/bin/ls", "ls", "-l", NULL);
  return 0;
}

在上面的代码中,execl 函数调用了 ls 命令,并传递了两个参数 -l (显示文件详细信息)。当调用 execl 函数时,程序将会暂停执行,并执行 ls 命令。当 ls 命令执行完毕后,程序才会继续执行。

如果想要实现类似 system() 函数的功能,可以创建一个新的进程来执行 ls 命令,然后在主进程中等待新进程的执行结束。例如:

#include <unistd.h>
#include <sys/wait.h>

int system(const char *command) {
  int pid = fork();

  if (pid == 0) {
    // 在子进程中执行命令
    execl("/bin/sh", "sh", "-c", command, NULL);
  } else if (pid > 0) {
    // 在父进程中等待子进程结束
    waitpid(pid, NULL, 0);
  } else {
    // fork 失败
    return -1;
  }

  return 0;
}

int main() {
  system("ls -l");
  return 0;
}

在上面的代码中,我们定义了一个 system 函数,它接收一个字符串作为参数,然后在一个新的进程中执行该字符串

exec函数族 与 system函数
如有帮助,望采纳
https://blog.csdn.net/weixin_43566124/article/details/120625405