第一步:先构造一个结构体链表struct student
第二步:定义一个指针*pstudent,让它指向struct student,并分配空间(kmalloc(sizeof(struct student)*5,GFP_KERNEL)其实*5就是分配5个结构体空间,其实就是一个数组形式,然后pstudent指向这个空间)
第三步:list_add()函数向内核链表struct list_head list中添加节点(即每个pstudent[i].list每个成员)
第四步:list_for_each()函数提取结构体数据
2、几处经典的用法#include <linux/module.h>
#include <linux/init.h>#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/list.h>
struct student
{
char name[100];
int num;
struct list_head list;
};
struct student *pstudent;
struct student *tmp_student;
struct list_head student_list;
struct list_head *pos;
int __init mylist_init(){
int i = 0;
INIT_LIST_HEAD(&student_list);
pstudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL);
memset(pstudent,0,sizeof(struct student)*5);
for(i=0;i<5;i++)
{
//sprintf(pstudent[i].name,"student%d",i+1); // 怎样向结构体name中添加数据???
pstudent[i].num = i+1;
list_add(&(pstudent[i].list),&student_list); // 怎样向内核链表中添加节点???
}
list_for_each(pos,&student_list)
{
tmp_student = list_entry(pos,struct student,list);
printk("<0>student %d name:%s\n",tmp_student->num,tmp_student->name);
}
return 0;
}
void __exit mylist_exit()
{
int i;
for(i=0;i<5;i++)
{
list_del(&(pstudent[i].list));
}
kfree(pstudent);
}
module_init(mylist_init);
module_exit(mylist_exit);
书籍嘛,不用多说肯定是罗云彬大神的经典了(windows环境下32位汇编语言程序设计)
编译器使用radasm这个汉化版很好用,包括了教程等,推荐,安装好后最好设置环境变量把radasm/masm32/路径下的lib 和include两个路径都加入环境变量(方法自己搜)
关于资源编辑器不得不说radasm自带的resed不好用,个人推荐绿色软件ResEdit编辑好后另存为res文件后就好了
对于大神的代码都是文本打造的,用radasm打开不能正确编译,还好大神给了一个makefile但是每次要编译程序都要进入cmd然后经过n次cd命令再输入nmake,后来想到ubuntu下的在当前路径打开终端,呵呵于是就到网上搜了下方法将下面的两句保存为bat文件就可以在当前路径中打开命令行了(CurrentDirCmd名字可以自定义)
reg add HKEY_CLASSES_ROOT\Directory\Background\shell\CurrentDirCmd
reg add HKEY_CLASSES_ROOT\Directory\Background\shell\CurrentDirCmd\command /ve /t reg_sz /d C:\Windows\System32\cmd.exe /f
恩,暂时就这么多了.....
小弟我也是刚刚接触iphone开发,所以最近刚好有个项目需要进行第一次程序进入的判断,上网收,自己写,发现一个最有效的方法,亲测可以用,闲话少说,沈阳斌子我直接上代码了:
在didFinishLaunchingWithOptions方法中加入如下代码:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]){ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstStart"]; NSLog(@"第一次启动"); }else{ NSLog(@"不是第一次启动"); }
好了,就这么简单,希望帮助到同样是初学的你。大家一起努力!