Linux CC 语言和 linux cmd 混用

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述Linux CC 语言和 linux cmd 混用相关的知识,希望能为你提供帮助。


C 程序获取本进程的PID号,
利用PID号,使用linux命令查询 ???/proc/PID/status??? 下的 ??VmSize?? 字段

// test script.c
// generate workload

#include < stdio.h>
#include < stdlib.h>
#include < unistd.h>
#include < string.h>
#define LEN 1000


void my_system(const char *cmd)

char result[10240] = 0;
char buf[1024] = 0;
FILE *fp = NULL;

if( (fp = popen(cmd, "r")) == NULL )

printf("popen error!\\n");
return;


while(fgets(buf, sizeof(buf), fp))

strcat(result, buf);

pclose(fp);
printf("%s\\n", result);


void main(int argc, char* argv[])

unsigned long int PID = getpid();
char cmd[50] = 0;
sprintf(cmd, "cat /proc/%ld/status | grep VmSize", PID);

for(int i = 0; i < LEN; i++)

printf("i=%d, malloc addr=%p\\n", i, (char*)malloc(1024));
my_system(cmd);
// sleep(1);
// printf("\\n\\n");



更进一步,只提取 VmSize 的值。

// test script.c
// generate workload

#include < stdio.h>
#include < stdlib.h>
#include < unistd.h>
#include < string.h>
#define LEN 1000


void my_system(const char *cmd)

char result[10240] = 0;
char buf[1024] = 0;
FILE *fp = NULL;

if( (fp = popen(cmd, "r")) == NULL )

printf("popen error!\\n");
return;


while(fgets(buf, sizeof(buf), fp))

strcat(result, buf);

pclose(fp);
// printf("%s\\n", result);
unsigned long int VmSize = 0;
char str[20] = 0;
// printf("result: %s\\n", result);
sscanf(result, "%s%ld", str, & VmSize);
printf("%ld\\n", VmSize);


void main(int argc, char* argv[])

unsigned long int PID = getpid();
char cmd[50] = 0;
sprintf(cmd, "cat /proc/%ld/status | grep VmSize", PID);

for(int i = 0; i < LEN; i++)

printf("i=%d, malloc addr=%p\\n", i, (char*)malloc(1024));
my_system(cmd);
// sleep(1);
// printf("\\n\\n");


【Linux CC 语言和 linux cmd 混用】


    推荐阅读