在Linux中使用exec函数族中的其它5个函数,实现下面代码同样的功能 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { pid_t pid = fork(); if(pid == 0) { execl("/bin/ps", "ps", "-ef", NULL); perror("execl error"); exit(1); } else if(pid > 0) { waitpid(pid, NULL, 0); } else { perror("fork error"); return 1; } return 0; }
时间: 2024-03-25 22:37:27 浏览: 50
除了 execl() 函数之外,还有其它 5 个函数可以实现相同的功能,它们分别是 execlp()、execle()、execv()、execvp() 和 execve()。下面是使用 execvp() 函数实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid = fork();
if (pid == 0) {
char *args[] = {"ps", "-ef", NULL};
execvp("/bin/ps", args);
perror("execvp error");
exit(1);
} else if (pid > 0) {
waitpid(pid, NULL, 0);
} else {
perror("fork error");
return 1;
}
return 0;
}
```
这里我们使用了 execvp() 函数,它与 execl() 函数的区别在于,它接受一个字符串数组作为参数,第一个元素是要执行的命令,后面的元素是命令的参数列表,最后一个元素必须是 NULL,用于表示参数列表的结束。
在程序中,我们创建了一个名为 args 的字符串数组,它包含了 ps 命令及其参数。然后我们调用 execvp() 函数来执行 ps 命令。如果 execvp() 函数返回,说明出错了,我们调用 perror() 函数输出错误信息,然后使用 exit() 函数退出子进程。
在父进程中,我们调用 waitpid() 函数等待子进程结束,然后返回 0。
阅读全文