Sheet4
Sheet4
ID :20210080
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/uaccess.h>
#include <linux/sched/signal.h>
Static ssize_t procfile_read(struct file* file, char* buffer, size_t length, loff_t* offset)
Int len;
Char* state;
Char* command;
If (*offset > 0) {
Return 0;
Return 0;
Switch (task->state) {
Case TASK_RUNNING:
State = “TASK_RUNNING”;
Break;
Case TASK_INTERRUPTIBLE:
State = “TASK_INTERRUPTIBLE”;
Break;
Case TASK_UNINTERRUPTIBLE:
State = “TASK_UNINTERRUPTIBLE”;
Break;
Case __TASK_STOPPED:
State = “__TASK_STOPPED”;
Break;
Case __TASK_TRACED:
State = “__TASK_TRACED”;
Break;
Case TASK_DEAD:
State = “TASK_DEAD”;
Break;
Default:
State = “UNKNOWN”;
Command = (char*)task->comm;
Len = sprintf(procfs_buffer, “command = [%s] pid = [%d] state = [%s]\n”, command, pid_value,
state);
*offset += len;
Return len;
} else {
Return -EFAULT;
Static ssize_t procfile_write(struct file* file, const char* buffer, size_t length, loff_t* offset)
Char* temp_buffer;
If (temp_buffer == NULL) {
Return -ENOMEM;
Kfree(temp_buffer);
Return -EFAULT;
Kfree(temp_buffer);
Return length;
.owner = THIS_MODULE,
.read = procfile_read,
.write = procfile_write,
};
If (our_proc_file == NULL) {
Return -ENOMEM;
Return 0;
Remove_proc_entry(PROCFS_NAME, NULL);
Module_init(init_module);
Module_exit(cleanup_module);