首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

算法与数据结构之十----内核中的链表操作学习

/**************************************************************** 文件内容:内核之链队操作 版本V1.0 作者:HFL 时间:2013-12-22 说明:用户态中链表每个节点包含数据域和指针域,而内核态是每个数据中包含链表 因此内核态链表一般是嵌套在某个包含数据成员的结构体来实现。 内核的链表应用非常广泛:进程管理,定时器,工作队列,运行队列。总之 内核对于多个数据的组织和多个熟悉的描述都是通过链表串起来的。  *****************************************************************/  #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h> #include <linux/list.h> MODULE_DESCRIPTION("My Module"); MODULE_ALIAS("My module"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("HFL21014"); struct student {     char name[100];     int counter;     struct list_head list; }; struct student *Mystudent; struct student *Temp_student; struct list_head student_list; struct list_head *pos; int Kernel_list_init() { int j = 0; INIT_LIST_HEAD(&student_list); Mystudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL); memset(Mystudent,0,sizeof(struct student)*5); for(j=0;j<5;j++) {        sprintf(Mystudent[i].name,"Student%d",j+1);       Mystudent[j].counter = j+1;      list_add( &(Mystudent[j].list), &student_list); }  list_for_each(pos,&student_list) //遍历整个内核链表,pos其实就是一个for循环标量。中间临时使用,既不输入也不输出 { Temp_student = list_entry(pos,struct student,list);  printk("hello,my student %d  name: %s\n",Temp_student->counter,Temp_student->name); } return 0; } void Kernel_list_exit() { int k ; /* 模块卸载是要删除链表,并释放内存 */ for(k=0;k<10;jk++) { list_del(&(Mystudent[k].list));      } kfree(Mystudent); } module_init(Kernel_list_init);

03

ubuntu经常使用的命令摘要

1.df命令 # df -ha 显示所有文件和分区的使用 # df -h /dev/sda1 显示sda1磁盘使用率 # df -T 显示文件系统名称属于每个分区。区的格式类型(比方ext3) 注:h參数表示转换为M。G等人们经常使用的磁盘空间单位显示 2.du命令 # du -h src 显示src文件夹中各个文件(或者文件)所占用的磁盘空间 # du -hs /usr 显示usr文件夹中全部文件的总大小 # du -h test.c 显示test.c文件所占用的磁盘空间 3.dd命令 dd 是 Linux/UNIX 下的一个很实用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同一时候进行指定的转换。 # dd if=/dev/hdb | gzip > /root/image.gz 备份/dev/hdb全盘数据。并利用gzip工具进行压缩。保存到指定路径 注:“|”表示管道命令,是指“|”的左边执行结果是其右边的输入条件或者范围。如:history | grep date指从history这条命令执行的结果中显示包括有“date”的命令 # gzip -dc /root/image.gz | dd of=/dev/hdb 将压缩的备份文件恢复到指定盘 # dd if=/dev/fd0 of=disk.img bs=4M 备份软盘。读和写的块大小为4M 4.# uname -a 查看Ubuntu的版本号 5.cat命令 # cat -n test.c 显示整个test.c的内容,并对内容按行编号 6.lsmod命令 # lsmod 显示全部内核载入的模块 # lsmod | grep mptspi 显示内核载入的全部包括mtpspi的模块 7.# lsusb 查看USB设备 8.# cat /proc/cpuinfo 查看cpu的状态 9.# lshw 查看硬件信息 10.# fdisk -l 查看磁盘的信息 # fdisk /dev/sda 对磁盘sda(注意不是sda1,sda1是sda的一个分区)进行操作,包含新建分区。删除分区等,后面的操作按提示选项进行。 11.# free -m 查看当前内存使用情况 12.# ps -A 查看当前系统有哪些进程 13.# kill 进程号 中止一个进程 14.# kill -9 进程号 强制中止一个进程。kill 进程号不成功时能够使用 15.# top 查看当前进程的实时状况 # top -p 786 显示进程号为786的进程的实时执行状况 16.ifconfig命令 # ifconfig 显示网卡相关的信息 # ifconfig eth0 up 打开eth0网卡 # ifconfig eth0 down 关闭eth0网卡 # infonfig eth0 192.168.1.1 设置eth0的IP地址为192.168.1.1 17.启动停止服务命令 # /etc/init.d/服务名 restart/stop/start 重新启动/停止/启动一个服务 18.# whereis 文件名称 高速查找一个文件 19.# find 文件夹 -name 文件名称 在文件夹中查找某个文件名称的文件 find -name ‘*fb*’ 在当前文件夹下查找文件名称中包括”fb”字样的文件 find /usr -name ‘*fb*’ 在/usr文件夹下查找文件名称中包括”fb”字样的文件 20.# tail -n 6 文件名称 假设值的前面有 +(加号)。从文件开头指定的单元数開始将文件写到标准输出。假设值的前面有 -(减号)。则从文件末尾指定的单元数開始将文件写到标准输出。假设值前面没有 +(加号)或 -(减号)。那么从文件末尾指定的单元号開始读取文件。 # tail -n 6 文件名称 == # tail -n -6 文件名称 21.grep命令 # grep ‘test’ d* 显示全部以d开头的文件里包括test的行。

02
领券