linux下可以使用popen完成这个功能.
linux中一般通过system()系统调用执行相应的shell或app程序,但其返回的结果只有'0'或'-1',为了能够获取被执行程序的stdout输出,我们可以考虑使用popen();
#include
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。pclose() 函数关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状态。如果 shell 不能被执行,则 pclose() 返回的终止状态与 shell 已执行 exit 一样。
type 参数只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 "r" 则文件指针连接到 command 的标准输出;如果 type 是 "w" 则文件指针连接到 command 的标准输入。
popen使用的shell是 /bin/sh
示例如下:
-
#include <stdio.h>
-
#include <sys/types.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <string.h>
-
-
char* cmd_system(const char* command);
-
int main()
-
{
-
char* result = cmd_system("ls -lh ");
-
printf("The result:%s\n",result);
-
return 0;
-
}
-
-
char* cmd_system(const char* command)
-
{
-
char* result = "";
-
FILE *fpRead;
-
fpRead = popen(command, "r");
-
unsigned char buf[1024*20];
-
int ibuflen = 0;
-
memset(buf,'\0',sizeof(buf));
-
int tr = 0;
-
while((tr = fgetc(fpRead))!=EOF)
-
{
-
buf[ibuflen++] = (unsigned char)tr;
-
}
-
buf[ibuflen++] = '\0';
-
result = buf;
-
if(fpRead!=NULL)
-
pclose(fpRead);
-
return result;
-
}
参考:http://www.cnblogs.com/loulijun/archive/2012/05/08/2490738.html
阅读(2626) | 评论(0) | 转发(1) |