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) = '