如何在配置文件中定义算法|Linux内核根目录中的配置文件config中包含了许多宏定义

㈠ c语言怎么把宏定义的数据配置到文件中,当需要更改某些数据时,不需要打开程序,在文件中直接修改。

无论是头文件还是源文抄件 不安装编译环境的情况下 用txt 打开基本也没问题 只是有的时候需要改变下打开方式如果是需要把数据配置到文件中 那么就要用到C语言的文件操作功能。设定为在程序运行时读入指定位置的文件数据,按一定规则赋值给其他变量就行。具体操作可以 网络文库 C语言文件操作但是这种方法不是用在宏定义上,宏只是一种编译前的替换,如果这个程序已经编译好了 就算能通过文本修改也没用 除非 再次编译。如果非要实现相近的功能 可以不定义宏,而是通过文件操作功能。在用到相关变量的时候通过文件读取获的。这样就能在不用再次编译的条件下,实现修改。

㈡ linux内核根目录中的配置文件.config中包含了许多宏定义,

一、Linux内核的配置系统由三个部分组成,分别是: 1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能; 3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。 二、Make menuconfig过程分析 1、scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容 2、读取arch/arch/$ARCH/Kconfig以及各子目录下的Kcondig文件,生成配置条目。 $ARCH由linux内核根目录下的makefile文件决定 ARCH ?= arm CROSS_COMPILE ?= arm-linux- Kconfig文件中为配置信息的宏定义,与我们在make menuconfig图形界面看到的信息一致。 例如: config CPU_S3C2410_DMA bool depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442) default y if CPU_S3C2410 || CPU_S3C2442 help DMA device selection for S3C2410 and compatible CPUs 因此,Kconfig文件很重要的作用就是:定义配置宏、相关依赖关系、帮助信息 3、读取内核根目录下.config文件,生成配置选项:[*]编译进内核 [M]编译为模块 [ ]不编译 arch/arm/configs/文件夹下存放了一些配置模板 我们可以通过cp /arch/arm/configs/xx_defconfig .config来使用这些配置模板 通过图形界面变更配置选项会自动更新到.config文件中 make disclean 会删除.config 4、编译过程根据.config生成 Linux内核根目录下的 include/config/auto.conf文件 CONFIG_EEPROM_93CX6=m CONFIG_DM9000=y 根目录Makefile以及子目录的Makefile根据auto.conf生成编译条件 obj-$(CONFIG_DM9000) += dm9000.o //obj-m += dm9000.o 5、编译过程根据.config生成Linux内核根目录下的 include/linux/autoconf.h文件 .config 或 auto.conf 中定义要编译为 m 模块的项,如: CONFIG_DEBUG_NX_TEST=m 在 autoconf.h 中会被定义为: #define CONFIG_DEBUG_NX_TEST_MODULE 1 .config或auto.conf 中定义为编译为 y 的选项,如: CONFIG_DM9000= y 在 autoconf.h 中会被定义为: #define CONFIG_DM9000 1 autoconf.h中是.config或者auto.conf中配置信息的另一种体现形式,它是站在源码的角度,供源码使用的C语言宏定义。 6、总结 我们在使用make menuconfig时,首先会确定架构arch,然后读取arch目录的Kconfig中的配置宏定义,生成编译条目,然后读取Linux内核根目录下的.config选项, 将.config中的配置信息显示在图形界面上[*] [M] or []。我们在图形界面中更改配置选项会自动保存到.config文件中。编译过程根据.config随后生成auto.conf文件,它决定了makefile中各个文件的编译类型,静态编译进内核、编译成模块、不编译;同时生成autoconf.h,它以C语言宏定义的形式表达了 各个文件是否被编译,源码中会判断某文件是否被编译进行不同的处理。 三、将自定义文件添加进内核配置系统 1、修改文件目录下Kconfig文件 添加: config HELLO tristate "just a test hello" default y —help— This is a test //tristate 或 bool 表示可选择种类数量3[*][M][ ]、2 // "just a test hello"将作为标题显示在配置的图形界面 2、修改文件目录下makefile文件 obj-$(CONFIG_HELLO) += hello_drv.o 3、make menuconfig 我们会在字符设备驱动的界面看到 ust a test hello 并且默认编译进内核 4、make编译内核发现 autoconfig.h 自动添加 #define CONFIG_HELLO 1 auto.conf 自动添加 CONFIG_HELLO=y

㈢ 用C#如何读写配置文件

INI文件就是扩展名为”ini”的文件。x0dx0a其一般形式如下:x0dx0a[section1] // 配置节x0dx0a//键名 //键值x0dx0akeyword1 = valuelx0dx0akeyword2 = value2x0dx0a??x0dx0a[section2]x0dx0akeyword3 = value3x0dx0akeyword4 = value4x0dx0a在Windows系统中,INI文件是很多,最重要的就是”System.ini”、”System32.ini”和”Win.ini”。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。以及XML文件的国际标准化给INI文件又一次打击。x0dx0a但在某些场合,INI文件还拥有其不可替代的地位。比如绿色软件的规定就是不向注册表和系统中填入新东西。对于软件需要储存的信息就需要存入到文件中了。XML虽然兼容性比较好,但对于仅仅保存几个自定义参数而言就显得大材小用了。这是就可以选择使用快速简单的储存方式:INI文件。x0dx0a本文就来探讨一下C#是如何对INI进行读写操作。x0dx0a主要思路是调用Win32 API。x0dx0a1.引入命名空间x0dx0ausingSystem.Runtime.InteropServices;x0dx0a2.声明(把一个Win32 API函数转成C#函数)x0dx0a//声明INI文件的写操作函数 WritePrivateProfileString()x0dx0a[DllImport(“kernel32”)]x0dx0aprivate static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);x0dx0a//声明INI文件的读操作函数 GetPrivateProfileString()x0dx0a[DllImport(“kernel32”)]x0dx0aprivate static extern intGetPrivateProfileString(string section, string key, string def, StringBuilderretVal, int size, string filePath);x0dx0a3.函数x0dx0apublic void Writue(string section,string key, string value)x0dx0a{x0dx0a// section=配置节,key=键名,value=键值,path=路径(section,key, value, sPath);x0dx0a}x0dx0apublic string ReadValue(stringsection, string key)x0dx0a{x0dx0a// 每次从ini中读取多少字节x0dx0aSystem.Text.StringBuilder temp =new System.Text.StringBuilder(255);x0dx0a// section=配置节,key=键名,temp=上面,path=路径x0dx0aGetPrivateProfileString(section,key, “”, temp, 255, sPath);x0dx0areturntemp.ToString(); //注意类型的转换x0dx0a}x0dx0a到此基本功能已经实现了。下面我们将所有的代码重新整合一下:x0dx0anamespace Library.Filex0dx0a{x0dx0apublic class Inix0dx0a{x0dx0a// 声明INI文件的写操作函数 WritePrivateProfileString()x0dx0a[System.Runtime.InteropServices.DllImport(“kernel32”)]x0dx0aprivate static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);x0dx0a// 声明INI文件的读操作函数 GetPrivateProfileString()x0dx0a[System.Runtime.InteropServices.DllImport(“kernel32”)]x0dx0aprivate static extern intGetPrivateProfileString(string section, string key, string def,System.Text.StringBuilder retVal, int size, string filePath);x0dx0aprivate string sPath = null;x0dx0apublic Ini(string path)x0dx0a{x0dx0athis.sPath = path;x0dx0a}x0dx0apublic void Writue(string section,string key, string value)x0dx0a{x0dx0a// section=配置节,key=键名,value=键值,path=路径(section,key, value, sPath);x0dx0a}x0dx0apublic string ReadValue(stringsection, string key)x0dx0a{x0dx0a// 每次从ini中读取多少字节x0dx0aSystem.Text.StringBuilder temp =new System.Text.StringBuilder(255);x0dx0a// section=配置节,key=键名,temp=上面,path=路径x0dx0aGetPrivateProfileString(section,key, “”, temp, 255, sPath);x0dx0areturn temp.ToString();x0dx0a}x0dx0a}x0dx0a}x0dx0a开始调用函数。x0dx0a// 写入inix0dx0aIni ini = newIni(“C:/config.ini”);x0dx0aini.Writue(“Setting”,”key1″, “HELLO WORLD!”);x0dx0aini.Writue(“Setting”,”key2″, “HELLO CHINA!”);x0dx0a// 读取inix0dx0aIni ini = newIni(“C:/config.ini”);x0dx0astring str1 =ini.ReadValue(“Setting”, “key1”);x0dx0aMessageBox.Show(str1);x0dx0a二,在一些小的应用中,有时候不需要使用数据困这样大规模的数据管理工具,也很少进行数据的查询、修改等操作,而仅用文件来存储数据。这时就需要使用。net中的文件操作对象,如file、streamReader、streamWriter等。x0dx0a1,使用File对象操作文件x0dx0aSystem.IO.File类提供了一系类的静态办法,完成对晚间的常用操作,如新建、删除、拷贝、移动等x0dx0a2,使用StreamWriter写入文件x0dx0a在System.IO空间中定义了一个文件写入器对象StreamWriter,使用它可以以一种特定的编码向输出流中(Stream)写入字符。x0dx0a3,使用SteamReader读取文件x0dx0a与streamWrite对应


赞 (0)