proc文件系统中,相应进程目录下有个关于进程状态的文件stat(status也以较好的易读性记录着进程的状态)
解析/proc/%d/stat文件,可得到相应进程的状态
解析过程如下:
-
int monitor(){
-
char* tmp_fn = ( char* )malloc( 1024 ); //存储proc文件系统中对应进程所在的目录
-
snprintf( tmp_fn , 1024 , "/proc/%d/stat" , pid);//此处pid为所要监控的进程号
-
-
FILE* f = fopen( tmp_fn , "r" );
-
char* stat_line = ( char* )malloc( 1024 );//存储/proc/%d/stat文件中的前一部分字符串用以提取进程状态
-
memset(stat_line, 0, sizeof(stat_line) );//理解为对stat_line的初始化
-
fgets( stat_line , 1024 , f );//读取stat文件前一部分字符以方便提取进程状态标志
-
fclose( f );
-
-
char * stat_ptr = strrchr( stat_line , ')' );//截取从')'末次出现位置开始的子字符串
-
if( stat_ptr != NULL ){
-
char tmp;
-
stat_ptr += 2;
-
sscanf( stat_ptr, "%c", &tmp );//sscanf函数以传入的字符串为输入源
-
printf( "%c", tmp);
-
}
-
return 1;
-
}
所涉及到的函数功能注释:
1. int snprintf(char* str, size_t size, const char* format,[arguments]...);
所需的头文件:#include
函数功能:将可变个参数(...)按照format给定的格式,格式化为字符串,然后将其复制到str中
如果格式化后的字符串长度后的长度>size,则只将其中的(size-1)个字符复制到\str中,并给其后添加’\0’
返回值:实际格式化后的字符串的长度;出错则返回负值
个人理解:重定向了输出
此函数与sprintf的区别日后添上
-
char* tmp = (char*) malloc (1024);
-
snprintf( tmp, 1024, "%s%d", "abc", 24);
-
puts(tmp);//abc24
2. int sscanf(const char* buffer, const char* format,[arguments]…)
头文件:#include
函数功能:从buffer读进数据,依照format 的格式将数据写进arguments中(可通过format灵活的控制所想要读入的数据)
返回值:成功返回参数数目,失败返回-1
个人理解:输入源的重定向
-
char* s = "hello,23";
-
char* tmp = (char*) malloc(6);
-
int i = 0;
-
sscanf( s, "%[^,],%d", tmp ,&i );// %[^,]表示一直匹配非,的字符
-
puts(tmp);//打印出hello
-
printf("%d", i);//打印出23
3.void *memset(void *s, int ch, size_t n);
头文件:#include
函数功能:将s中的前n个字节,用ch替换并返回s(可对较大的结构体或数组进行清零操作的一种最快方法)
4.char* strrchr(const char* str, char c )
头文件:#include
函数功能:查找字符c在字符串str中末次出现的位置,并返回从这个位置起直到字符串结束的子字符串;如未能找到返回NULL
阅读(2120) | 评论(0) | 转发(0) |