本文主要是介绍c程序-popen调用shell指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、popen和pclose函数介绍
文章 <Linux 笔记--system 函数执行shell指令>,介绍了 system 函数执行shell 指令。但是 system 函数只能获取到shell命令的返回值,而不能获取shell命令的输出结果。
这篇文章将介绍 popen 和 pclose 函数,通过调用 popen 函数来调用 shell 指令,可以获取shell命令的输出信息或者与执行的指令进行交互。
看下 popen 函数介绍:
The popen() function opens a process by creating a pipe, forking, and invoking the shell.
函数头文件:
#include <stdio.h>
函数原型:
FILE *popen(const char *command, const char *type);int pclose(FILE *stream);
描述:
The popen() function opens a process by creating a pipe, forking, and
invoking the shell. Since a pipe is by definition unidirectional, the
type argument may specify only reading or writing, not both; the
resulting stream is correspondingly read-only or write-only.
二、测试代码
popen 和 pclose 需成对使用。popen 第二个参数为 "r" 和 "w"。
功能 使用 ifconfig 指令获取返回的网卡信息并打印,测试代码如下:
#include <stdio.h>
#include <string.h> int main(int argc,char*argv[])
{ FILE *fstream=NULL; char buff[1024]; memset(buff,0,sizeof(buff)); if(NULL==(fstream=popen("ifconfig","r"))) // ifconfig 指令 { fprintf(stderr,"execute command failed: %s",strerror(perror)); return -1; } printf("%s\r\n","haha-start"); while(NULL!=fgets(buff, sizeof(buff), fstream)) // 获取 ifconfig 指令返回的数据信息{printf("%s",buff); }printf("%s\r\n","haha-end"); pclose(fstream); // 关闭return 0;
}
三、测试结果
编译执行,测试结果如下:
可以看到执行了 ifconfig 指令,并且正确获取到了返回数据结果。
这篇关于c程序-popen调用shell指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!