diff --git a/example/linux/Makefile b/example/linux/Makefile index 8268d12..58600b2 100755 --- a/example/linux/Makefile +++ b/example/linux/Makefile @@ -3,6 +3,7 @@ BIN = xcmder OBJ += xcmd.o \ xcmd_default_keys.o \ xcmd_default_cmds.o \ + xcmd_platform.o \ linux_main.o \ test.o \ ex_keys.o \ diff --git a/example/linux/linux_main.c b/example/linux/linux_main.c index 77d03e2..ced16c3 100755 --- a/example/linux/linux_main.c +++ b/example/linux/linux_main.c @@ -154,6 +154,7 @@ int main(void) ex_cmds_init(); socket_cmds_init(); fs_cmds_init(); + linux_cmd_init(); while (1) { xcmd_task(); diff --git a/example/linux/xcmd_platform.c b/example/linux/xcmd_platform.c new file mode 100644 index 0000000..ef3a6c4 --- /dev/null +++ b/example/linux/xcmd_platform.c @@ -0,0 +1,298 @@ +#include +#include +#include +#include "xcmd_platform.h" +#include "xcmd.h" +#include "list.h" +struct student +{ + struct list_head stu_list; + int ID; + int math; +}; + +static int list_test(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos; + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + //头插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + + printf("list_add: \r\n"); + list_for_each(pos, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos)->ID,((struct student*)pos)->math); + } + + //尾插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + //list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + list_add_tail(&p->stu_list,&stu2.stu_list); + } + + printf("list_add_tail: \r\n"); + list_for_each(pos, &stu2.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos)->ID,((struct student*)pos)->math); + } + return 0; +} + + +static int list_note_del(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos1; + //注意这里的pos2,后面会解释为什么定义为 + struct student *pos2; + //stu = (struct student*)malloc(sizeof(struct student)); + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + LIST_HEAD(stu); + //头插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + + printf("list_add: \r\n"); + list_for_each(pos1, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + //删除 + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + if (pos2->ID == 4) { + list_del(&pos2->stu_list); + break; + } + } + + printf("list_del\r\n"); + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + printf("ID = %d,math = %d\n",pos2->ID,pos2->math); + } + return 0; +} + +static int list_note_rep(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos1; + struct student *pos2; + struct student new_obj={.ID=100,.math=100}; + //stu = (struct student*)malloc(sizeof(struct student)); + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + LIST_HEAD(stu); + //头插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + printf("list_add: \r\n"); + list_for_each(pos1, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + //替换 + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + if (pos2->ID == 4) { + list_replace(&pos2->stu_list,&new_obj.stu_list); + break; + } + } + printf("list_replace\r\n"); + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + printf("ID = %d,math = %d\n",pos2->ID,pos2->math); + } + return 0; +} + + +static int list_note_del_insert(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos1; + struct student *pos2; + struct student new_obj={.ID=100,.math=100}; + //stu = (struct student*)malloc(sizeof(struct student)); + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + LIST_HEAD(stu); + //头插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + printf("list_add: \r\n"); + list_for_each(pos1, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + //移位替换 + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + if (pos2->ID == 0) { + list_move(&pos2->stu_list,&stu1.stu_list); + break; + } + } + printf("list_move\r\n"); + list_for_each_entry(pos2,&stu1.stu_list,stu_list) { + printf("ID = %d,math = %d\n",pos2->ID,pos2->math); + } + return 0; +} + +static int List_to_merge(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos1; + struct student *pos2; + struct student new_obj={.ID=100,.math=100}; + //stu = (struct student*)malloc(sizeof(struct student)); + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + LIST_HEAD(stu); + //头插法创建stu1 list链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + printf("stu1: \r\n"); + list_for_each(pos1, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + //头插法创建stu2 list 链表 + for (int i = 0;i < 3;i++) { + q = (struct student *)malloc(sizeof(struct student)); + q->ID=i; + q->math = i+80; + //头插法 + list_add(&q->stu_list,&stu2.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + printf("stu2: \r\n"); + list_for_each(pos1, &stu2.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + //合并 + list_splice(&stu1.stu_list,&stu2.stu_list); + printf("list_splice\r\n"); + list_for_each(pos1, &stu2.stu_list) { + printf("stu2 ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + + return 0; +} + +static int List_traverse(int argc, char* argv[]) +{ + struct student *p; + struct student *q; + struct student stu1; + struct student stu2; + struct list_head *pos1; + struct student *pos2; + struct student new_obj={.ID=100,.math=100}; + //stu = (struct student*)malloc(sizeof(struct student)); + //链表的初始化 + INIT_LIST_HEAD(&stu1.stu_list); + INIT_LIST_HEAD(&stu2.stu_list); + LIST_HEAD(stu); + //头插法创建stu stu1链表 + for (int i = 0;i < 6;i++) { + p = (struct student *)malloc(sizeof(struct student)); + p->ID=i; + p->math = i+80; + //头插法 + list_add(&p->stu_list,&stu1.stu_list); + //尾插法 + //list_add_tail(&p->list,&stu.list); + } + printf("stu1: \r\n"); + list_for_each(pos1, &stu1.stu_list) { + printf("ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + printf("list_for_each_prev\r\n"); + list_for_each_prev(pos1, &stu1.stu_list){ + printf("stu2 ID = %d,math = %d\n",((struct student*)pos1)->ID,((struct student*)pos1)->math); + } + + return 0; +} + +static xcmd_t cmds[] = +{ + {"list", list_test, "list test demo", NULL}, //链表增加节点 + {"list1", list_note_del, "list note del demo", NULL}, //链表删除节点 + {"list2", list_note_rep, "list note replace demo", NULL}, //链表替换节点 + {"list3", list_note_del_insert, "list note del and insert demo", NULL}, //链表删除并插入节点 + {"list4", List_to_merge, "List to merge", NULL}, //链表的合并 + {"list5", List_traverse, "List to merge", NULL}, //链表的遍历 +}; + + +void linux_cmd_init(void) +{ + xcmd_cmd_register(cmds, sizeof(cmds)/sizeof(xcmd_t)); +} + + diff --git a/example/linux/xcmd_platform.h b/example/linux/xcmd_platform.h index 8c14d37..3408b47 100644 --- a/example/linux/xcmd_platform.h +++ b/example/linux/xcmd_platform.h @@ -7,4 +7,6 @@ #include #include +void linux_cmd_init(void); + #endif \ No newline at end of file