⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps_read.c

📁 linux/unix下c/s形式的资源监视,客户端负责搜集机器,再传送到服务端.
💻 C
字号:
/* *  Monitor-Server/ps_read.c * *  Copyright (C) 2004 Jian Shen <shenjian@net.pku.edu.cn> */#include "statinfo.h"#include "socket.h"#include <asm/semaphore.h>#include <linux/unistd.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/seq_file.h>struct pinfo {	int NR_PROCS;	proc_list_t* proclist;	proc_stat_t* proc_data;};/*****************************************************/static void *ps_start(struct seq_file *m, loff_t *pos){//	printk("ps_start\n");	struct pinfo* pin = (struct pinfo*)m->private;	return *pos < pin->NR_PROCS ? pin->proc_data + *pos : NULL;}static void *my_start(struct seq_file *m, loff_t *pos){	struct pinfo* pin = (struct pinfo*)m->private;	return *pos < pin->NR_PROCS ? pin->proc_data + *pos : NULL;}static void *ps_next(struct seq_file *m, void *p, loff_t *pos){//	printk("ps_next: %d\n", (int)*pos);	++*pos;	return my_start(m, pos);}static void ps_stop(struct seq_file *m, void *p){//	printk("ps_stop\n");}static int ps_show(struct seq_file *m, void *p){	proc_stat_t *proc = (proc_stat_t*)p;	/* seperate with a tab */	seq_printf(m, "%s\t%d\t%d\t%s\t%s\t%d\t%d\t%c\t%d\t%d\t%s\t%s\t%d:%d:%d:%d\t%s\t%s\t%s\n",			   proc->user,			   proc->pid,			   proc->ppid, 			   proc->cpu_percent,			   proc->mem_percent,			   proc->vsize,			   proc->rss,			   proc->state,			   proc->last_cpu,			   proc->page_fault,			   proc->usr_time,			   proc->sys_time,			   proc->time_lasting.day,			   proc->time_lasting.hour,			   proc->time_lasting.minute,			   proc->time_lasting.second,			   proc->command,			   proc->cwd,			   proc->exe		);	return 0;}struct seq_operations ps_op = {	start:	ps_start,	next:	ps_next,	stop:	ps_stop,	show:	ps_show,};static int ps_open(struct inode *inode, struct file *file){//	printk("ps_open\n");	struct dentry *parent = file->f_dentry->d_parent;	struct pinfo *pin;	struct seq_file *m;	int ret;	pin = (struct pinfo*)kmalloc(sizeof(struct pinfo), GFP_KERNEL);	if(pin == NULL) {		printk(KERN_ERR "Kmalloc failed.\n");		return -ENOMEM;		/* Out of memory */	}	pin->proclist = (proc_list_t*)kmalloc(sizeof(proc_list_t), GFP_KERNEL);	if(pin->proclist == NULL) {		printk(KERN_ERR "Kmalloc failed.\n");		return -ENOMEM;		/* Out of memory */	}		if(ps_get_proc_list(parent->d_name.name, pin->proclist) < 0) {		kfree(pin->proclist);		return -EPIPE;		/* Broken pipe */	}	pin->NR_PROCS = pin->proclist->num_of_procs;//	printk("NR_PROCS: %d\n", NR_PROCS);	pin->proc_data = &(pin->proclist->procs[0]);	ret = seq_open(file, &ps_op);	m = (struct seq_file*)file->private_data;	m->private = pin;	return ret;}static int ps_release(struct inode *inode, struct file *file){//	printk("ps_release\n");	int ret;	struct seq_file *m = (struct seq_file*)file->private_data;	struct pinfo* pin = (struct pinfo*)m->private;	if(pin == NULL)		return seq_release(inode, file);	if(pin->proclist != NULL)		kfree(pin->proclist);	kfree(pin);	ret = seq_release(inode, file);	return ret;}struct file_operations proc_ps_operations = {	open:		ps_open,	read:		seq_read,	llseek:		seq_lseek,	release:	ps_release,};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -