在VMWare、RedHat Linux的环境下,也已经安装了gcc,请给我写一个c语言程序,分别用execlp()、execl()和execv()函数实现命令“find / -name abc”的功能
时间: 2024-10-10 19:05:43 浏览: 53
redhat linux手动RPM安装gcc,g++
在VMware和Red Hat Linux环境下,你可以使用C语言标准库提供的`exec*()`系列函数来执行外部命令。以下是三个函数版本的示例,它们分别实现了"find / -name abc"命令:
1. `execlp()`函数,它会查找可执行文件并执行,如果找不到会返回错误(假设`find`在PATH环境变量下可用):
```c
#include <stdio.h>
#include <unistd.h>
int main() {
// 使用execlp()执行find命令
if (execlp("find", "find", "/", "-name", "abc", NULL) == -1) {
perror("Error executing find command");
return 1;
}
// 如果执行成功,此行不会被执行,因为控制权会立即交给find
printf("Command executed successfully.\n");
return 0; // 这一行将永远不会被执行
}
```
2. `execl()`函数需要手动指定路径到可执行文件,这里假定`find`位于"/usr/bin":
```c
#include <stdio.h>
#include <unistd.h>
int main() {
// 使用execl()执行find命令
if (execl("/usr/bin/find", "find", "/", "-name", "abc", NULL) == -1) {
perror("Error executing find command");
return 1;
}
// 同上
printf("Command executed successfully.\n");
return 0;
}
```
3. `execv()`函数接受一个字符串数组作为参数,包含全部命令及其参数:
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
char *cmd[] = {"find", "/", "-name", "abc", NULL};
// 使用execv()执行find命令
if (execv(cmd[0], cmd) == -1) {
perror("Error executing find command");
return 1;
}
// 同上
printf("Command executed successfully.\n");
return 0;
}
```
每个例子中,如果命令执行成功,程序会立即终止,并控制权转交给了`find`命令。
阅读全文