关于linux内核链表分析的例子
来源:互联网 发布:下载软件91助手 编辑:程序博客网 时间:2024/05/14 06:18
原文地址:关于linux内核链表分析的例子 作者:blowingwind
之前在我的blog中转载了linux内核链表分析,其中分析和例子是基于2。6的内核的 ,最近在作2.4的东西,于是顺便将例子改成了2.4内核可以通过的版本 。呵呵 反正都改了就贴出来了 。
/*********************************************************************
*
* Filename: pfile.c
* Version: 1.0
* Description: Demo for Linux LIST utility
* Compilation: gcc -D__KERNEL__ -I/usr/src/linux/include pfile.c
* Status: Stable
* Author: Yang Shazhou<pubb@163.net>
* Created at: Thu Jul 15 13:50:33 2004
* Modified at: Thu Jul 15 14:39:03 2004
* Modified by: Yang Shazhou<pubb@163.net>
*
* Copyright (c) 2004 Yang Shazhou, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
********************************************************************/
#include <linux/list.h>
#include <stdio.h>
#include <strings.h>
*
* Filename: pfile.c
* Version: 1.0
* Description: Demo for Linux LIST utility
* Compilation: gcc -D__KERNEL__ -I/usr/src/linux/include pfile.c
* Status: Stable
* Author: Yang Shazhou<pubb@163.net>
* Created at: Thu Jul 15 13:50:33 2004
* Modified at: Thu Jul 15 14:39:03 2004
* Modified by: Yang Shazhou<pubb@163.net>
*
* Copyright (c) 2004 Yang Shazhou, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
********************************************************************/
#include <linux/list.h>
#include <stdio.h>
#include <strings.h>
int main(int argc,char *argv[])
{
LIST_HEAD(list); //定义存放文件内容的链表
FILE *fp;
{
LIST_HEAD(list); //定义存放文件内容的链表
FILE *fp;
struct file_store {
char c;
struct list_head node;
} *pstore;
char c;
struct list_head node;
} *pstore;
if(argc<2){
printf("usage: pfile <filename> <[r]>\n");
return -1;
}
if(!(fp=fopen(argv[1],"rb"))){
printf("fopen(%s) error\n",argv[1]);
return -1;
}
printf("usage: pfile <filename> <[r]>\n");
return -1;
}
if(!(fp=fopen(argv[1],"rb"))){
printf("fopen(%s) error\n",argv[1]);
return -1;
}
/* 读文件到链表 */
while(1){
if(!(pstore=(struct file_store *)malloc(sizeof(struct file_store))))
break;
pstore->c=fgetc(fp);
printf("input %c\n " ,pstore->c) ;
if(feof(fp)){
free(pstore);
break;
}
list_add_tail(&pstore->node,&list); //将本字符插入链表中
}
fclose(fp);
while(1){
if(!(pstore=(struct file_store *)malloc(sizeof(struct file_store))))
break;
pstore->c=fgetc(fp);
printf("input %c\n " ,pstore->c) ;
if(feof(fp)){
free(pstore);
break;
}
list_add_tail(&pstore->node,&list); //将本字符插入链表中
}
fclose(fp);
/* 遍历链表,输出链表中的节点个数,即文件字符数 */
int count=0;
struct list_head *p;
list_for_each(p,&list){
count++;
}
printf("%s has altogether %d character(s)\n",argv[1],count);
int count=0;
struct list_head *p;
list_for_each(p,&list){
count++;
}
printf("%s has altogether %d character(s)\n",argv[1],count);
/* 根据命令行参数正向/反向遍历链表,输出链表中存放的字符,同时释放各节点 */
/*if(argc>2 && !strcasecmp(argv[2],"r")){
struct list_head *p;
list_for_each_entry_reverse(pstore,&list,node){ //反向遍历,没有保护
p=pstore->node.next;
list_del(&pstore->node);
putchar(pstore->c);
free(pstore);
// 如果没有这一句,将报segmentation fault //
pstore=list_entry(p,struct file_store,node); //取数据项
}
}else */{
struct file_store *pstorenode;
struct list_head *p ,*n;
int k = 0 ;
// list_for_each_entry_safe(pstore,p,&list,node){ //正向遍历,有保护
// list_for_each(p,&list) {
list_for_each_safe(p, n,&list) {
pstorenode = list_entry(p ,struct file_store ,node) ;
putchar(pstorenode->c);
//list_del_init(&(pstorenode->node));
k++ ;
if( k ==7) break ;
free(pstorenode);
}
}
/*if(argc>2 && !strcasecmp(argv[2],"r")){
struct list_head *p;
list_for_each_entry_reverse(pstore,&list,node){ //反向遍历,没有保护
p=pstore->node.next;
list_del(&pstore->node);
putchar(pstore->c);
free(pstore);
// 如果没有这一句,将报segmentation fault //
pstore=list_entry(p,struct file_store,node); //取数据项
}
}else */{
struct file_store *pstorenode;
struct list_head *p ,*n;
int k = 0 ;
// list_for_each_entry_safe(pstore,p,&list,node){ //正向遍历,有保护
// list_for_each(p,&list) {
list_for_each_safe(p, n,&list) {
pstorenode = list_entry(p ,struct file_store ,node) ;
putchar(pstorenode->c);
//list_del_init(&(pstorenode->node));
k++ ;
if( k ==7) break ;
free(pstorenode);
}
}
return 0;
}
}
- 关于linux内核链表分析的例子
- Linux 内核链表例子
- linux内核链表分析
- linux内核链表分析
- linux内核链表分析
- linux内核链表分析
- linux内核链表分析
- linux内核链表分析
- linux内核链表分析
- Linux内核链表分析
- linux内核链表分析
- 关于Linux内核源代码情景分析的点点滴滴
- 关于Demo_Compositor 例子的分析
- 关于分析函数的例子
- 关于 Demo_DeferedShading 例子的分析
- 关于 Demo_Ocean 例子的分析
- Linux设备驱动程序学习(7)-内核的数据类型(深入分析Linux内核链表)
- Linux内核部件分析--更强的链表klist
- Linux 内核链表例子
- 使用Mina框架开发 QQ Android 客户端(3) 登陆功能的实现
- 静态类型 动态类型
- 在photoshop中如何制作一个简洁干净的按钮
- 高手论声明VB.NET事件
- 关于linux内核链表分析的例子
- C++第10周项目3参考——乘法口诀表
- 利用poi实现页面上excel的导入和导出(不刷新页面)之导入
- 忆枫提供真实的伤感日志_错过,就真的不再有了
- 获取触发postback事件的控件的名称
- Xcode常用快捷键
- C++第10周项目3扩展参考——英尺到米的转换表
- 如何获取请求行的相关信息
- dtree