ps 프로그램 공부중 인데 무슨 뜻인지 이해가 안됩니다. 주석처리좀 부탁드립니다.
#include "stdio.h"
#include "stdlib.h"
#include "string.h" /* <> 이 문자가 안써져서 "" 문자로 남겼습니다.*/
#include "sys/types.h"
#include "sys/stat.h"
#include "unistd.h"
#include "fcntl.h"
#include "dirent.h"
#include "ctype.h"
static int MZ_ps_LoadFile(char *s_FileName, void **s_Buffer)
{
int s_Return = (-1), s_Handle, s_Length;
*(s_Buffer) = (void *)0;
s_Handle = open(s_FileName, O_RDONLY);
if(s_Handle >= 0)
{
s_Length = 32 << 10;
*(s_Buffer) = (void *)malloc(s_Length);
if(*(s_Buffer))s_Return = read(s_Handle, *(s_Buffer), s_Length);
else fprintf(stderr, "Not enough memory !!!\n");
close(s_Handle);
}
else fprintf(stderr, "Can not open file \"%s\" !!!\n", s_FileName);
return(s_Return);
}
static void MZ_ps(void)
{
char *s_ProcDirectory = "/proc";
DIR *s_Directory;
struct dirent *s_DirectoryEntry;
char s_TempPath[32];
s_Directory = opendir(s_ProcDirectory);
if(s_Directory)
{
fprintf(stdout, "%5s %5s %5s %5s %s\n", "PPID", "PID", "UID", "State", "Name");
do
{
s_DirectoryEntry = readdir(s_Directory);
if(s_DirectoryEntry)
{
void *s_Buffer, *s_Ptr;
int s_Length;
char s_Name[16];
int s_State, s_PID, s_PPID, s_UID;
if(isdigit(*((char *)(s_DirectoryEntry->d_name))) == 0)continue;
s_Name[0] = s_Name[15] = '\0';
s_State = '?';
s_PID = (-1);
s_PPID = (-1);
s_UID = (-1);
sprintf(&s_TempPath[0], "%s/%s/status", s_ProcDirectory, (char *)s_DirectoryEntry->d_name);
s_Length = MZ_ps_LoadFile(&s_TempPath[0], &s_Buffer);
if(s_Length > 0 && s_Buffer)
{
s_Ptr = strstr(s_Buffer, "Name:");
if(s_Ptr)sscanf(s_Ptr, "Name:\t%15s", &s_Name[0]);
s_Ptr = strstr(s_Buffer, "State:");
if(s_Ptr)sscanf(s_Ptr, "State:\t%c", (char *)&s_State);
s_Ptr = strstr(s_Buffer, "Pid:");
if(s_Ptr)sscanf(s_Ptr, "Pid:\t%d", &s_PID);
s_Ptr = strstr(s_Buffer, "PPid:");
if(s_Ptr)sscanf(s_Ptr, "PPid:\t%d", &s_PPID);
s_Ptr = strstr(s_Buffer, "Uid:");
if(s_Ptr)sscanf(s_Ptr, "Uid:\t%d", &s_UID);
free(s_Buffer);
}
sprintf(&s_TempPath[0], "%s/%s/cmdline", s_ProcDirectory, (char *)s_DirectoryEntry->d_name);
s_Length = MZ_ps_LoadFile(&s_TempPath[0], &s_Buffer);
if(s_Length > 0 && s_Buffer)
{
fprintf(stdout, "%5d %5d %5d %c %s\n", s_PPID, s_PID, s_UID, s_State, s_Name);
free(s_Buffer);
}
}
}while(s_DirectoryEntry);
closedir(s_Directory);
}
else fprintf(stderr, "Can not open directory \"/proc\"\n");
}
int main(int s_Argc, char **s_Argv)
{
fprintf(stdout, "MZ_ps v1.0.0 - Copyright(c)InfoEQ co.,LTD - %s %s\n", __DATE__, __TIME__);
fprintf(stdout, "Code by JaeHyuk Cho - \n\n");
MZ_ps();
return(0);
일단 코드를... code
일단 코드를...
code 테크를 써서 보기좋게 올리심이..
Re: 어느 부분이 이해가 안 되는 겁니까?
그냥 코드 쭉 올려놓고 이해 못하겠다고 하는건...
"수학 좀 알려주세요. 아무것도 모르거든요... 모르는게 뭔지도 몰라요..."
라고 하는 것과 같군요. -_-;;
댓글 달기