在Linux环境下,C语言可以通过system()
函数、exec
系列函数或者fork()
结合exec
系列函数来调用可执行程序。
system()
函数system()
函数是最简单的调用外部程序的方法,它直接在shell中执行命令。
示例代码:
#include <stdlib.h>
int main() {
int ret = system("ls -l"); // 执行ls -l命令
return ret;
}
优势:
劣势:
exec
系列函数exec
系列函数可以直接替换当前进程的镜像,执行新的程序。
常见的exec
函数有:
execl()
execv()
execle()
execve()
execlp()
execvp()
示例代码(使用execl()
):
#include <unistd.h>
int main() {
execl("/bin/ls", "ls", "-l", (char *)NULL); // 执行ls -l命令
return 1; // 如果exec成功,这里的代码不会被执行
}
优势:
劣势:
fork()
结合exec
系列函数通过fork()
创建子进程,然后在子进程中使用exec
系列函数执行新的程序。
示例代码:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) { // 子进程
execl("/bin/ls", "ls", "-l", (char *)NULL);
return 1; // 如果exec成功,这里的代码不会被执行
} else if (pid > 0) { // 父进程
int status;
waitpid(pid, &status, 0); // 等待子进程结束
} else {
perror("fork"); // fork失败
}
return 0;
}
优势:
劣势:
system()
函数。exec
系列函数。fork()
结合exec
系列函数。perror()
或strerror()
打印错误信息。popen()
函数可以获取命令的输出结果。示例代码(使用popen()
):
#include <stdio.h>
int main() {
FILE *fp = popen("ls -l", "r");
if (fp == NULL) {
perror("popen");
return 1;
}
char buffer[128];
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
pclose(fp);
return 0;
}
通过以上方法,可以在Linux环境下使用C语言调用可执行程序,并根据具体需求选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云