话不多说,直接贴代码
#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN 1024
int main()
{
char command[MAX_LEN],content[MAX_LEN];
FILE *fp;
//将指令写入command
sprintf( command, "cat /proc/meminfo" );
fp = popen( command, "r" );
if(fp == NULL)
return -1;
//读取指令返回的内容并关闭指针
fread( content, sizeof(char), sizeof(content)-1, fp );
content[sizeof(content)-1] = '\0';
pclose(fp);
//将结果输出到当前目录下Mem文件
fp = fopen( "./Mem", "wt");
fwrite( content, sizeof(char), strlen(content)+1, fp);
pclose(fp);
}
接下来的内容适合希望对使用函数有更深了解的同学
1、 FILE* popen( const char* command, const char* type);
函数会调用 fork(); 生成子进程。然后通过子进程去调用 /bin/sh -c “command” 执行指令。
/bin/sh -c 作用是将一整个字符串当做一个完整的指令去执行。当一个command中含有两条指令的时候 :
sudo echo “example” >> example.txt
如上包含了 echo 和 >> 两条指令,而当用户没有这个文件的权限的时候,sudo只能给 echo 开启root权限,但是 >> 没有root权限,则会导致指令执行失败。而加上 /bin/sh -c 则可以解决这个问题。
type:“r”、“w”
分别表示读和写,使用"r",则可以通过fread();函数读出相关内容
参考博客:
popen的用法简单说明
/bin/sh -c的必要性