有人知道这个在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