Linux C程序如何调用Shell命令 (linux c 调用shell)
概述
在Linux C程序中,如果想要调用Shell命令,可以使用system函数或popen函数。system函数是调用Shell命令来执行某个操作,并将结果输出到标准输出设备。popen函数可以执行Shell命令,并可以通过管道来在程序中传递数据。
system函数
系统函数可以使用man system手册页面,在终端输入`man system`来查看。在Linux中,system函数的原型如下:
“`c
int system(const char *command);
“`
该函数可以执行command字符串中指定的Shell命令,并将命令的输出结果输出到标准输出设备。如果命令执行成功,system函数返回0,否则返回非0值。
下面是一个使用system函数调用Shell命令的示例:
“`c
#include
#include
int mn()
{
int ret = system(“ls -la”);
if (ret == 0)
{
printf(“Command executed successfully!\n”);
}
else
{
printf(“Command fled to execute!\n”);
}
return 0;
}
“`
上述代码中,我们调用了system函数来执行了一个`ls -la`命令,该命令会将当前目录下的所有文件和文件夹以长格式列出。如果system函数返回0,表示命令执行成功,我们在程序中输出一条成功执行的信息;反之,表示命令执行失败,我们在程序中输出一条错误信息。
popen函数
popen函数与system函数类似,都可以调用Shell命令。不同的是,popen函数可以通过管道来在程序中传递数据。也就是说,我们可以通过popen函数来获取Shell命令的输出结果,并将结果传递给程序中的其他函数。
popen函数同样可以使用man popen手册页面,在终端输入`man popen`来查看。在Linux中,popen函数的原型如下:
“`c
FILE *popen(const char *command, const char *type);
“`
popen函数接受两个参数,之一个参数command是要执行的Shell命令,第二个参数type是指定管道的类型,取值为”r”或”w”。如果type为”r”,则将建立一个只读管道,可以从管道中读取Shell命令执行的输出结果;如果type为”w”,则建立一个只写管道,可以将数据写入管道传递给Shell命令。
下面是一个使用popen函数调用Shell命令并传递数据的示例:
“`c
#include
#include
int mn()
{
FILE *fp;
char buff[1024];
fp = popen(“ls -la”, “r”);
if (fp == NULL)
{
printf(“Fled to open pipe!\n”);
exit(1);
}
while (fgets(buff, sizeof(buff), fp) != NULL)
{
printf(“%s”, buff);
}
pclose(fp);
return 0;
}
“`
在上述代码中,我们使用popen函数来执行一个`ls -la`命令,并建立一个只读管道来读取命令的输出结果。在循环中,我们使用fgets函数从管道中读取每一行输出结果,并将其打印到标准输出设备中。最后我们使用pclose函数关闭管道。
结论