linux 链表实例应用程序

内核链表在应用层应用 list.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;

	struct file_store {
		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;
	}

	/* 读文件到链表 */
	while(1){
		if(!(pstore=(struct file_store *)malloc(sizeof(struct file_store))))
			break;
		pstore->c=fgetc(fp);
		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);

	/* 根据命令行参数正向/反向遍历链表,输出链表中存放的字符,同时释放各节点 */
	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 *p;
		list_for_each_entry_safe(pstore,p,&list,node){		//正向遍历,有保护
			list_del(&pstore->node);
			putchar(pstore->c);
			free(pstore);
		}
	}

	return 0;
}
linux下双向循环链表实用例子 此问linux内核中对链表的双向循环链表进行简单的添加、删除、初始化等基本操作列子,大家可以进行简单的学习 立即下载

相关推荐

Spark on Yarn 高可用模式部署流程

本文介绍了如何配置Spark和Yarn的高可用(HA)环境,以确保在大规模数据处理中避免单点故障。

xhaoDream的博客 1444

链表实例应用

一:只实现链表的增加与访问 class Link{ private class Node{//内部类Node private String data; private Node next; public Node(String data) { this.data=data; } public void addNode(Node newNode) {//增加节点 if(this.next=

laugh哥的博客 1587

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

Linux内核链表原理和实例

深入分析Linux链表 链表的实例

jasonLee的博客 1535

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

槽型光电开关传感器原理图设计,已量产(光电传感器)

在嵌入式设备的位置限位、物料计数等场景中,槽型光电开关是性价比极高的传感器方案 —— 它通过遮挡发射器与接收器之间的光路实现电平切换,电路简单且抗干扰性优于漫反射式光耦。今天分享一个实际项目中落地的槽型光电开关检测电路,从器件选型到逻辑设计都做了简化适配,适合小批量原型或低成本产品的需求。

不脱发的程序猿 718

Linux内核链表移植到应用程序中及使用方法

《Linux内核链表移植到应用程序中的使用方法》 【程序测试及结果如图】: 【基本步骤如下】: 1、创建链表和迭代器 //--- 创建链表 ---// struct list_head myList; //--- 创建链表迭代器 ---// struct list_head* list_iterator; 2、初始化 /**

^_^ 1309

手把手教你学Simulink——基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的PR(比例谐振)控制器在单相整流系统中的应用。通过与传统PI控制器的对比,阐述了PR控制器在交流信号跟踪中的优势:可实现50Hz正弦电流的无静差跟踪,THD低于2%,功率因数接近1。文章从PR控制器原理出发,提供了Simulink建模的具体步骤,包括主电路搭建、电压外环设计、PR控制器实现方法(推荐MATLAB Function方式)以及SPWM调制。通过仿真验证了PR控制在稳态和负载突变情况下的优越性能,并探讨了工程实践中的电网频率自适应、多谐振PR等关键技术。该教程为

MHD0815的博客 123

linux 应用层编程之内核链表list的使用

linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表。因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的插入、查询、修改和删除操作。想深入了解的话直接阅读内核list源代码,代码不是很多,只有list.h 和 types.h。内核源码可以直接下载也可以使用下文给出的链接。内核定义了链表的结构体,任何链表...

fuyuande的博客 6118

手把手教你学AUTOSAR(13.1)--基于 AUTOSAR 的开发实战实例(一)

通过上述几个基于 AUTOSAR 的开发实战实例,你可以全面了解如何从需求分析、系统设计、软件开发、集成测试到部署和验证等多个环节进行 AUTOSAR 系统的开发。这些实例不仅涵盖了不同的应用场景,还提供了具体的代码实现和技术细节,帮助你更好地应用 AUTOSAR 标准。

MHD0815的博客 1195

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 block,问题分析及解决方案汇总》,本文以案例的形式,详细讲解pix4d中手动添加连接点的方法及操作步骤。 文章目录1. 手动添加连接点2. 重新优化3. 生成质量报告,检查精度 1. 手动添加连接点 在【空三射线】模式下查看校准失败的图片,记下照片的名称。.

智慧空间实验室 2万+

linux 链表程序,Linux 链表实例应用程序

/*********************************************************************** Filename: pfile.c* Version: 1.0* Description: Demo for Linux LIST utility* Compilation: gcc –D__KERNEL__ -I/usr/...

weixin_39576127的博客 144

Android 64位支持的坑:诡异的文件名问题

最近在尝试发布我的Android应用程序的更新时,遇到了一个令人困惑的64位错误。本文将详细讲解这个问题的产生原因及解决方法,供大家参考。

m0_74337424的博客 123

linux 链表实例应用程序【转】

转自:http://blog.youkuaiyun.com/echo_qiang/article/details/6233057 /********************************************************************* * * Filename: pfile.c * Version: 1...

weixin_34226706的博客 159

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

linux内核链表应用

在Linux内核中使用了大量的链表结构来组织数据,包括设备列表以及各种功能模块中的数据组织。这些链表大多采用在[include/linux/list.h]实现的一个相当精彩的链表数据结构。事实上,内核链表就是采用双循环链表机制。内核链表有别于传统链表就在节点本身不包含数据域,只包含指针域。故而可以很灵活的拓展数据结构。

flypig has a dream! 1090

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

linux list_head

前一篇文章讨论了list_head 结构的基本结构和实现原理,本文主要介绍一下实例代码。 自己如果想在应用程序中使用list_head 的相应操作(当然应该没人使用了,C++ STL提供了list 用起来貌似更方便), 在应用程序中需要包含自己的 "list.h" 头文件:

xiaogou56a的专栏 476

Linux内核链表的移植与使用

一、Linux内核链表为双向循环链表,和数据结构中所学链表类似,具体不再细讲。由于在内核中所实现的函数十分经典,所以移植出来方便后期应用程序中的使用。 /**************************************** 文件名:kernel_link_list_of_linux.h 作者:Bumble Bee 日期:2015-1-31 功能:移植linux内核链表 ******...

zhangge3663的博客 581

Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】

(转自:https://blog.youkuaiyun.com/Deep_l_zh/article/details/48392935) 摘要:将内核链表移植到应用程序中,实现创建,添加节点,遍历,删除的操作。 首先复习一下内核链表中经常使用的几个函数,在/include/linux/list.h中。 创建链表: <span style=...

Uaena的博客 270

Linux双向循环链表的实现

链表是一种重要的数据结构,应用的非常广泛。链表分为单向链表与双向链表,一般的实现就是在结构体中内嵌指向下一个元素的指针。例如: [cpp] view plaincopy struct name {       int num;       ...;       struct name *next;       struct name *prev;

u013952558的专栏 552

linux 内核链表(二)

在开始写linux内核双向循环链表之前,我一直在想我要不要用长篇大论的文字来描述linux内核双向循环链表呢?经过认真的思考之后,我否决了用枯燥的文字向读者描述linux内核双向循环链表的想法,因为对于编程语言来说我相信大多数的读者都应该不喜欢面对枯燥的文字,更喜欢看到代码,同时那也是读者阅读文字后想要实现的东西,所以我决定在这里采用代码加上适当的文字描述的方法来进行讲解,这就使得我不可能用一篇的

lbaihao的专栏 568

C语言的那些小秘密之【链表(三)】

FROM: http://blog.youkuaiyun.com/bigloomy/article/details/6639549 ================================================== 在开始写linux内核双向循环链表之前,我一直在想我要不要用长篇大论的文字来描述linux内核双向循环链表呢?经过认真的思考之后,我否决了用枯燥的文字向读者描述lin

·没有风雨躲得过,没有坎坷不必走· 1009

Linux 内核list_head container_of

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究一下C语言的面向对象机制)。下面就是kernel中的list_head结构定义: struct li

jiuzhangzi的博客 479

linux 应用程序使用struct list_head链表,Linux内核链表的移植与使用

一、Linux内核链表为双向循环链表,和数据结构中所学链表类似,具体不再细讲。由于在内核中所实现的函数十分经典,所以移植出来方便后期应用程序中的使用。/****************************************文件名:kernel_link_list_of_linux.h作者:Bumble Bee日期:2015-1-31功能:移植linux内核链表**************...

weixin_32081079的博客 233
上一篇: scanf的注意细节
下一篇: linux内核链表
echo_qiang
博客等级 码龄16年 45粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值