C语言在linux环境下执行终端命令
1.system()函数
system()函数用来执行一个shell命令,并返回执行结果。
语法:
#include <stdlib.h>
int system(const char *command);
-
command:要执行的命令字符串。
-
函数返回值:如果命令执行成功,则返回0;如果命令执行失败,则返回-1。
System函数的行为依赖于操作系统和环境。在大多数情况下,System函数会创建一个新的进程来执行指定的命令,然后等待该命令完成,并返回命令的退出状态。如果命令执行成功,System函数通常会返回0。如果命令执行失败,System函数会返回非0值。
如果需要更精细的控制,如命令的输出、错误处理、命令的并行执行等,可能需要使用更复杂的API,如popen或fork/exec系列函数。
#include <stdio.h>
#include <stdlib.h>
int main() {
int status = system("echo 'hello word' > test.txt");
if (status == 0) {
printf("Command executed successfully\n");
} else {
printf("Command failed with status %d\n", status);
}
return 0;
}
//将hello word输出到test.txt文件中
2.popen()函数
popen函数是C语言标准库中的一个功能强大的工具,它允许程序与命令行命令进行交互。具体来说,popen函数用于创建一个管道,并通过这个管道与启动的新进程通信。这个新进程是由popen函数执行的命令行命令生成的子进程。
语法:
#include <stdio.h>
#include <stdlib.h>
FILE *popen(const char *command, const char *type);
-
command:要执行的命令字符串。
-
type:指定管道的类型,可以是"r"、“w"或"rw”。"r"表示只读,"w"表示只写,"rw"表示读写。
-
函数返回值:如果命令执行成功,则返回指向管道的文件指针;如果命令执行失败,则返回NULL。
command参数指定了要执行的命令,而type参数决定了打开的文件模式,可以是"r"(表示读模式)或"w"(表示写模式)。
当type为"r"时,popen函数返回的文件指针连接到命令的标准输出上,即我们可以从这个文件指针读取命令的输出;反之,当type为"w"时,文件指针连接到命令的标准输入上,即我们可以向这个文件指针写入数据,这些数据将作为命令的输入。
popen函数是通过fork一个子进程来执行命令的,而这个子进程是通过调用/bin/sh -c来执行command指定的命令。
这意味着command可以包含多个命令,它们会被当作一个脚本执行。
在使用popen函数后,必须使用pclose函数来关闭由popen函数返回的文件指针。pclose函数不仅关闭了文件指针,还会等待命令执行完毕,并返回shell的终止状态。如果popen函数调用失败,它会返回NULL,并且可以通过检查errno来获取具体的错误信息。
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp =