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函数关闭管道。

结论


数据运维技术 » Linux C程序如何调用Shell命令 (linux c 调用shell)