华 中 科 技 大 学 课 程 设 计 报 告
label = gtk_label_new(\
gtk_container_add(GTK_CONTAINER(window),label);
gtk_widget_show_all(window);
g_signal_connect(window,\ /*线程的初始化*/
if(!g_thread_supported()) g_thread_init(NULL); gdk_threads_init(); /*创建线程*/
g_thread_create((GThreadFunc)cpu_usage, NULL, FALSE, NULL); }
else if((pid_3 = fork()) == 0){ gtk_init(&argc,&argv); /*窗口初始化*/
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),\ gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_NONE); gtk_container_set_border_width(GTK_CONTAINER(window),100); /*标签*/
label = gtk_label_new(\
gtk_container_add(GTK_CONTAINER(window),label);
gtk_widget_show_all(window);
g_signal_connect(window,\ /*线程的初始化*/
if(!g_thread_supported()) g_thread_init(NULL); gdk_threads_init(); /*创建线程*/
g_thread_create((GThreadFunc)add, NULL, FALSE, NULL); }
gdk_threads_enter(); gtk_main ();
gdk_threads_leave(); return 0; }
实验二:
sys.c:
asmlinkage int sys_mysyscall(char* sourceFile,char* destFile){ int source=sys_open(sourceFile,O_RDONLY,0);
int dest=sys_open(destFile,O_WRONLY|O_CREAT|O_TRUNC,0600); char buf[4096]; mm_segment_t fs; fs = get_fs();
set_fs(get_ds()); //设置为内核的内存访问地址范围 int i;
if(source>0 && dest>0) {
20
华 中 科 技 大 学 课 程 设 计 报 告
do {
i=sys_read(source,buf,4096); sys_write(dest,buf,i); }while(i); }
sys_close(source); sys_close(dest); set_fs(fs); return 10; }
test.c:
#include
int main(){
syscall(326,\ return 0; }
实验三:
mydev.c:
#include \#include \#include \#include \#include \#include \#include \#include \#define BUFFER_SIZE 1024
static int my_open(struct inode *inode, struct file *file); static int my_release(struct inode *inode, struct file *file);
static ssize_t my_read(struct file *file, char __user *user, size_t t, loff_t *f); static ssize_t my_write(struct file *file, const char __user *user, size_t t, loff_t *f);
static char message[BUFFER_SIZE] = \static int device_num = 0;// static int counter = 0;//
static char* devname = \
struct file_operations pstruct = { .read = my_read, .write = my_write, .open = my_open,
.release = my_release };
int init_module(){
21
华 中 科 技 大 学 课 程 设 计 报 告
int ret;
ret = register_chrdev(0,devname,&pstruct); if(ret < 0){
printk(\ return -1; }
else {
printk(\ device_num = ret;
printk(\ printk(\
printk(\
printk(\
printk(\ printk(\ return 0; } }
void cleanup_module(){
unregister_chrdev(device_num,devname); printk(\}
static int my_open(struct inode *inode,struct file *file){ printk(\ printk(\ printk(\ try_module_get(THIS_MODULE); return 0; }
static int my_release(struct inode *inode,struct file *file){ printk(\ module_put(THIS_MODULE); return 0; }
static ssize_t my_write(struct file *file,const char __user *user,size_t t,loff_t *f){ if(copy_from_user(message,user,sizeof(message))) {
return -EFAULT; }
return sizeof(message); }
static ssize_t my_read(struct file *file,char __user *user,size_t t,loff_t *f){ if(copy_to_user(user,message,sizeof(message))) {
return -EFAULT; }
return sizeof(message);
22
华 中 科 技 大 学 课 程 设 计 报 告
}
test.c:
#include
int main(void) {
int fd;
char buf[MAX_SIZE]; char get[MAX_SIZE];
char devName[20], dir[50] = \ system(\
printf(\ gets(devName);
strcat(dir, devName);
fd = open(dir, O_RDWR | O_NONBLOCK); if (fd != -1) {
read(fd, buf, sizeof(buf));
printf(\ /* 测试写 */
printf(\ gets(get);
write(fd, get, sizeof(get)); /* 测试读 */
read(fd, buf, sizeof(buf)); system(\
printf(\ close(fd); return 0; } else {
printf(\ return -1; } }
makefile:
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean:
23
相关推荐: