《C语言》环形双链表——进程管理

2019-07-14 12:19发布

class="markdown_views prism-tomorrow-night">

《C语言》环形双链表——进程管理

Main.c

#include "ProcessManger.h" void main() { //创建一个节点(双链表) ProcessManger Taskmgr; //初始化双链表 InitList(&Taskmgr); //进程列表 Tasklist(&Taskmgr); //显示当前状态 Show(&Taskmgr); //消息循环 while (1) { Option(&Taskmgr); } }

ProcessManger.h

#pragma once #ifdef __cplusplus extern "C" { #endif #define _CRT_SECURE_NO_WARNINGS #include #include #include typedef struct ProcessList { //进程名称 char ProcessName[256]; //进程编号 unsigned int ProcessID; //会话名 char DialogueName[256]; //会话次数 unsigned int Dialogue; //内存使用情况 unsigned int MemorySize; //前驱 struct ProcessList* P_Pre; //后继 struct ProcessList* P_Next; }ProcessList; typedef struct ProcessManger { //头指针 ProcessList* P_Head; //尾指针 ProcessList* P_Tail; }ProcessManger; //遍历进程 void Tasklist(ProcessManger* P_List); //去除指定空格 char* EatSpace(char* Str); //数据挖掘 ProcessList* Excavate(char* Task); //初始化链表 void InitList(ProcessManger* P_List); //初始化节点 void InitNode(ProcessList* P_Node); //显示所有的进程 void Show(ProcessManger* P_List); //添加进程 void Append(ProcessManger* P_List, ProcessList* P_Node); //选项 void Option(ProcessManger* P_List); #ifdef __cplusplus } #endif

ProcessManger.c

#include "ProcessManger.h" //遍历进程 void Tasklist(ProcessManger* P_List) { //建立管道 FILE* Pfr = _popen("tasklist | find ".exe"", "r"); if (NULL == Pfr) { perror("Error:"); return; } else { char Buf[1024] = { 0 }; int i = 0; //读取管道信息 while (fgets(Buf, 1023, Pfr)) { Append(P_List, Excavate(Buf)); } _pclose(Pfr); Pfr = NULL; } } //去除空格 char* EatSpace(char* Str) { while (' ' == *Str) { Str = Str + 1; } return Str; } //数据挖掘 ProcessList* Excavate(char* Task) { if (NULL == Task) { return NULL; } //保存挖掘的数据 ProcessList* P_Info = (ProcessList*)malloc(sizeof(ProcessList)); InitNode(P_Info); char Str[1024] = { 0 }; strcpy(Str, Task); //挖掘进程名 char* P_Res = strstr(Str, ".exe"); if (NULL != P_Res) { *(P_Res + 5) = '