精华内容
下载资源
问答
  • 软件配置项的几个基本概念

    千次阅读 2014-02-26 16:32:04
    几个基本的概念,做个标记。以后忘了可以随时查一下。   配置项(configuration item)——指不定期用于配置管理正在配置管理过程中作为单个实体对待的硬件集合、软件集合或硬软件集合。[IEEE—STD—610]  ...

    几个基本的概念,做个标记。以后忘了可以随时查一下。

     

    配置项(configuration item)——指不定期用于配置管理正在配置管理过程中作为单个实体对待的硬件集合、软件集合或硬软件集合。[IEEE—STD—610]

     

    配置项的选择标准 根据项目拟订的输出工作产品计划,识别软件工作产品的配置项,文件项以及其他。

     

    配置项的管理策略 配置项的管理原则是不同状态的配置项要在不同的区域中进行管理,区域可以与配置项的状态对应,同时也可以有效的控制访问的级别;可以根据实际使用的配置管理工具设计更多的区域以细化管理,但是要求,以下三种状态的对应区域必须是存在:开发域、评审(/测试)域、发布域。

     

    【评论】

    管理策略可以这样理解:从开发到评审再到发布的过程,是个从不稳定到稳定的过程,也是个从私有到公开(对于组织内部)的过程。开发、评审、发布三域分隔,是配置项管理的基本原则,粗到这里已经不能再粗了,管的再粗就没法玩了。细细想想,这几年看到的不成功的配置管理局面,在这里就是违背的——难怪玩不下去,呵呵。软件配置项的几个基本概念

    展开全文
  • 让你提前认识软件开发---学长的软件开发经验总结(12) 配置文件读取及文件操作   【文章摘要】  在通信领域的软件开发项目中,C语言是主流的编程语言,... 本文以一个实际的小软件为例,介绍了C语言中配置文件的读取

    第1部分 重新认识C语言

    配置文件读取及文件操作

     

    【文章摘要】

            在通信领域的软件开发项目中,C语言是主流的编程语言,而文件操作在其中又占有很重要的地位。此外,为了体现产品的灵活性,可添加配置文件对某些重要的参数进行按需配置。这就要求程序能够准确读取到各个配置项的值。

           本文以一个实际的小软件为例,介绍了C语言中配置文件的读取方法和重要的文件操作函数的使用方法,为相关软件开发项目提供了有益的参考。

    【关键词】

            C语言 文件函数 配置文件 操作

     

    1.前言

            在一般的软件项目中,常常需要用C语言对文件进行操作。在诸如对账之类的程序中,尤其如此。而C语言中有关文件操作的函数多达数十种,熟悉常用函数(fopenfclosefgetsfreadfwrite)的操作可以提高项目的编程效率,具有很现实的意义。

            灵活性是优秀软件吸引用户的特性之一,为了体现软件的灵活性,可以将相关参数放置到一个配置文件中,用户可以根据需要进行设置。因此,C语言中的配置文件读取函数也值得关注。

            本文以作者编写过的软件为例,对C语言中配置文件的读取和常用的文件操作函数的使用方法进行了详细的介绍。

     

    2.本文使用的软件、文件操作函数和配置文件介绍

    2.1本文使用的软件

            本文使用的软件基于MFC实现,有一个用户操作的界面,如图1所示。

    1软件操作界面

            在本软件中,三个主要按钮实现的功能为:

            (1)“添加到输出框”按钮:从配置文件中读取相关信息,并输出到上面的空白框中(空白框的属性为LIST BOX)

            (2)“保存到文件”按钮:将从配置文件中读取到的信息保存到指定命名格式的文件中。

            (3)“上传到FTP”按钮:将(2)中生成的文件上传到指定的FTP目录中。

     

    2.2本文中使用的文件操作函数

            本文使用的文件操作函数包括fopenfwritefflushfclose等,对它们的详细说明如下:

            (1) fopen函数

            作用:打开文件

            表头文件:#include <stdio.h>

            定义函数:FILE *fopen(const char *path, const char *mode);

            函数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

            mode有下列几种形态字符串:

            r:打开只读文件,该文件必须存在。

            r+:打开可读写的文件,该文件必须存在。

            w:打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

            w+:打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

            a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

            a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

            上述的形态字符串都可以再加一个b字符,如rbw+bab+等组合,加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。

            返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败,则返回NULL,并把错误代码存在errno中。

            附加说明:一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

            (2) fwrite函数

            作用:将数据写至文件流

            表头文件:#include <stdio.h>

            定义函数:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

            函数说明:fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。fwrite()会返回实际写入的nmemb数目。

            返回值:返回实际写入的nmemb数目。

             (3) fflush函数

            作用:更新缓冲区

            表头文件:#include <stdio.h>

            定义函数:int fflush(FILE *stream);

            函数说明:fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数streamNULLfflush()会将所有打开的文件数据更新。

            返回值:成功返回0,失败返回EOF,错误代码存于errno中。

            错误代码:EBADF参数stream指定的文件未被打开,或打开状态为只读。

             (4) fclose函数

            作用:关闭文件

            表头文件:#include <stdio.h>

            定义函数:int fclose(FILE *stream);

            函数说明:fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。

            返回值:若关闭文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno中。

            错误代码:EBADF表示参数stream非已打开的文件。

     

    2.3本文中使用的配置文件

            为了程序的正常运行,一般都会事先约定配置文件的命名及格式。在本文中,配置文件为Config.ini(ini为配置文件的常用后缀),文件中涉及到的配置项及注释如下:

    ;用于配置文件的本地存放路径

    [General]

    ;文件的本地存放路径

    LocalPath  = D:\

    ;文件前缀

    FilePrefix = EmployeeInfo

    ;文件后缀(形如txt,注意,不要加.)

    FileSuffix = txt

     

    ;添加信息条数和具体信息(姓名+工号)

    [EmployeeInfo]

    ;消息条数

    MsgCount = 3

    ;消息内容

    content1 = 00000001张三

    content2 = 00000002李四

    content3 = 00000003王五

     

    ; FTP信息,需按照实际情况来配置

    [FTP]

    ; IP地址

    IPAddr   =

    ;用户名

    UserName =

    ;密码

    Password =

    ;传输方式:2 - BIN1 - ASC

    Mode = 1

    ;远端路径: FTP上传时存放文件的路径

    FTPPath =

     

           在配置文件中,将相关联的项放置在同一个大项中,用[]括起来(如上面的红色字体所示),各个小项的值直接放到等号的后面,注释部分用分号开头。

     

    2.4本文中使用的读取配置操作函数

             本文中使用的读取配置操作函数为GetPrivateProfileIntGetPrivateProfileString,对它们的详细说明如下:

             (1) GetPrivateProfileInt函数

            作用:从配置文件中读取一个值,并将结果转换为整型数据后保存到变量中。

            原型:UINT GetPrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName);

            各参数的意义:

             1) lpAppName:配置文件中的大项,用[]括起来的部分(2.3节的红色字体所示)

             2) lpKeyName:各大项下小项的字段名称,如2.3节中General下的LocalPath

             3) nDefault:如果配置文件中没有这个配置项,那么代码中取的默认值。

             4) lpFileName:配置文件名,如本文中的Config.ini

             举例:如本程序要获取MsgCount的值,则代码如下:

                int  iMsgCount = 0;

                iMsgCount = GetPrivateProfileInt("EmployeeInfo", "MsgCount", 0, “Config.ini”);

             (2) GetPrivateProfileString函数

             作用:从配置文件中读取一个值,并将结果转换为字符串型数据后保存到变量中。

             原型:DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);

             各参数的意义:

             1) lpAppName:配置文件中的大项,用[]括起来的部分(2.3节的红色字体所示)

             2) lpKeyName:各大项下小项的字段名称,如2.3节中General下的LocalPath

             3) lpDefault:如果配置文件中没有这个配置项,那么代码中取的默认值。

             4) lpReturnedString:代码中存放读取值的字符数组。

             5) nSize:一般为lpReturnedString字符数组的大小。

             6) lpFileName:配置文件名,如本文中的Config.ini

            举例:如本程序要获取FilePrefix的值,则代码如下:

            char szFilePrefix[100] = {0};

           GetPrivateProfileString("General", "FilePrefix",   "EmployeeInfo", szFilePrefix, 100, strINIFILE);

     

    2.5本文中使用的FTP操作函数

             本文中使用的FTP操作函数为GetFtpConnectionPutFile,对它们的详细说明如下:

             (1) GetFtpConnection函数

            作用:连接FTP服务器。

            原型:CFtpConnection* GetFtpConnection(LPCTSTR pstrServer, LPCTSTR pstrUserName, LPCTSTR pstrPassword, INTERNET_PORT nPort, BOOL bPassive);

            各参数的意义:

            1) pstrServer:服务名,即FTP服务器的IP地址。

            2) pstrUserName:用户名,即登录FTP服务器的用户名。

            3) pstrPassword:密码,即登录FTP服务器的密码。

            4) nPort:端口号,该参数默认值为INTERNET_INVALID_PORT_NUMBER

            5) bPassive:该项的默认值为FALSE

            (2) PutFile函数

            作用:FTP上传文件。

            原型:BOOL PutFile(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoteFile, DWORD dwFlags, DWORD_PTR dwContext);

            各参数的意义:

             1) pstrLocalFile:带存放路径的本地文件名。

             2) pstrRemoteFile:带存放路径的远端文件名,即文件存放在FTP服务器的何处。

             3) dwFlags:标识,该项取默认值FTP_TRANSFER_TYPE_BINARY

             4) dwContext:上下文标识,该项取默认值1

     

    3.程序流程

            如2.1节所述,本程序主要实现三个功能,对应的配置文件如2.3节所示。每个功能的流程及相关说明如下:

    3.1将配置文件中的数据添加到输出框

            (1)该功能的流程图

           如图2所示:

    2将配置文件中的数据添加到输出框流程图

    (2)消息内容格式及异常考虑

            本程序采用的消息内容格式为:工号姓名,如“00000001张三”,“00000001”表示工号,“张三”为姓名。在输出框里面,也是这样显示的。如图3所示。

    图3 单击“添加到输出框”后的输出内容

            本流程的异常情况主要考虑以下方面:

            1) MsgCount项的值为空或0

            2)消息内容项(content1content2content3)为空或出现内容完全相同。

            3)消息内容格式不正确,即不是“工号姓名”的格式。

            4)工号相同(一般而言,员工工号不能相同)

     

    3.2将配置文件中的数据写入文件

            (1)该功能的流程图

            如图4所示:

    4将配置文件中的数据写入文件流程图

             (2)文件命名、文件消息内容格式及异常考虑

             文件命名格式为:FilePrefix时分秒.FileSuffix,如“EmployeeInfo155431.txt”。

             文件消息内容格式与输出框格式一样,即“工号姓名”。如图5所示。

    图5 单击“保存到文件”后的输出文件内容

             本流程考虑的异常情况与3.1节相同。

             (3)有关文件操作函数的使用说明

             1)对于fopen函数,由于要向文件中写入数据,因此“mode”参数可以采用“a”等,但不能采用“r”等表示只能读取的参数。

             2)使用fwrite函数将数据写入文件,注意要在每条数据的最后面加上“\n”表示回车换行。

             3)在写入数据完成之后,一定要加上fclose函数关闭文件,并且fclose函数一定要与fopen函数配对,且在使用fclose函数之后,要将文件指针置为null

     

    3.3将生成的文件上传到FTP服务器

            (1)该功能的流程图

           如图6所示:

    6将生成的文件上传到FTP服务器流程图

            (2)有关FTP操作的说明

            1)在执行操作之前,一定要确保FTP服务器的各项参数都配置正确。对于“Mode”项,1表示以ASC方式上传,2表示以二进制方式上传。

            2) FTP操作的最大重试次数可根据需要进行设置,一般为3次。

     

    4.对本软件进行测试

            在程序运行起来之后,接下来的工作就是对之进行大量的测试,一定要对本程序涉及到的三个主要功能均进行充分的测试。

            为了使得测试顺利进行,在运行本软件之前,需要将本软件和配置文件放在同一个文件夹的同一级目录下。当然,也可以在代码中设定特殊的配置文件存放目录。

            对于“将配置文件中的数据添加到输出框”功能,检查输出框上面显示的内容是否和配置文件里面的信息一致,并对几种异常情况进行大量的测试。

            对于“将配置文件中的数据写入文件”功能,检查文件命名是否符合要求、文件存放地址是否正确、文件里面的内容是否和输出框显示的信息一致,同时要对几种异常情况进行大量的测试。

            对于“将生成的文件上传到FTP服务器”功能,检查FTP服务器上对应目录是否有文件存在,并对异常情况(FTP信息配置不准确、本地文件不存在、远端路径不存在等)进行一定的测试。

     

    5.总结

            文件操作和配置文件在实际的软件开发项目中是很常见的,掌握C语言中常用文件操作函数的使用方法是对一个软件开发工程师的基本要求。

            本文用实例来描述了C语言中常用的文件操作函数的用法及配置文件的使用方法。“冰冻三尺,非一日之寒”,要想熟练掌握C语言中常用文件操作函数及配置文件的用法,还需要我们不断地练习和总结。

     

     

    (欢迎访问南邮BBS:http://bbs.njupt.edu.cn/)
    (欢迎访问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)

    (本系列文章每周更新两篇,敬请期待!本人新浪微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

    展开全文
  • centos yum的配置文件 repo文件详解

    万次阅读 多人点赞 2014-11-24 17:54:53
    repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!YUM的工作原理...
    什么是repo文件?
    
    repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
    YUM的工作原理并不复杂,每一个 RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装 哪些基础软件。也就是说,在服务器上面先以分析工具将所有的RPM档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可 以知道所有相关联的软件。所以YUM的基本工作流程如下:
    服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
    客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。

    vi /etc/yum.conf
    [main]
    cachedir=/var/cache/yum/$basearch/$releasever

    #cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever。

    keepcache=1

    #keepcache:是否保留缓存内容,0:表示安装后删除软件包,1表示安装后保留软件包

    debuglevel=2
    #debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
    logfile=/var/log/yum.log
    pkgpolicy=newest
    #pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。
    distroverpkg=centos-release
    #指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
    tolerant=1
    #tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
    exactarch=1
    #exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
    retries=20
    #retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。
    obsoletes=1
    gpgcheck=1
    #gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
    reposdir=/etc/yy.rm #默认是 /etc/yum.repos.d/ 低下的 xx.repo后缀文件
    #默认都会被include 进来 也就是说 /etc/yum.repos.d/xx.repo 无论配置文件有多少个 每个里面有多少个[name] 最后其实都被整合到 一个里面看就是了 重复的[name]后面的覆盖前面的
    exclude=xxx
    #exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
    keepcache=[1 or 0]
    #  设置 keepcache=1,yum 在成功安装软件包之后保留缓存的头文件 (headers) 和软件包。默认值为 keepcache=0 不保存

    reposdir=[包含 .repo 文件的目录的绝对路径]
    #  该选项用户指定 .repo 文件的绝对路径。.repo 文件包含软件仓库的信息 (作用与 /etc/yum.conf 文件中的 [repository] 片段相同)。

    第二部分:
    vi /etc/yum.repo.d/xx.repo
    这个字段其实也可以在yum.conf里面直接配置

    [serverid]
    #其中serverid是用于区别各个不同的repository,必须有一个独一无二的名称。 重复了 前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面
    name=Some name for this server
    #name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates
    baseurl=url://path/to/repository/
    #baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:
    baseurl=url://server1/path/to/repository/
    url://server2/path/to/repository/
    url://server3/path/to/repository/
    #其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl只能有一个,也就是说不能像如下格式:
    baseurl=url://server1/path/to/repository/
    baseurl=url://server2/path/to/repository/
    baseurl=url://server3/path/to/repository/
    其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。

    #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
    #上面的这一行是指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。

    url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如:

    gpgcheck=1
    exclude=gaim
    #其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用,
    failovermethod=priority
    #failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。

    enabled=[1 or 0]
    #当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。
    #通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库

    几个变量
    $releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
    $arch,cpu体系,如i686,athlon等
    $basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
    对yum.conf设定完成,我们就可以好好体验yum带来的方便了。

    还有一件事没有做。那就是导入每个reposity的GPG key,前面说过,yum可以使用gpg对包进行校验,确保下载包的完整性,所以我们先要到各个repository站点找到gpg key,一般都会放在首页的醒目位置,一些名字诸如 RPM-GPG-KEY.txt之类的纯文本文件,把它们下载,然后用rpm --import xxx.txt命令将它们导入,最好把发行版自带GPG-KEY也导入,rpm --import /usr/share/doc/redhat-release-*/RPM-GPG-KEY 官方软件升级用的上。
    展开全文
  • yaml配置文件的使用方法总结 首先介绍使用yaml配置文件,这里使用的是...第二步:新建一个yaml文件,比如conf.yaml host: localhost:3306 user: root pwd: 123456 dbname: test1234 特别需要强调的是冒号...
    1. yaml配置文件的使用方法总结

    首先介绍使用yaml配置文件,这里使用的是github上第三方开源gopkg.in/yaml.v2
    第一步:下载

    go get gopkg.in/yaml.v21
    

    第二步:新建一个yaml文件,比如conf.yaml

    host: localhost:3306
    user: tigerwolfc
    pwd: 654321
    dbname: tablename
    

    特别需要强调的是冒号后面必须有一个空格,以user: tigerwolfc为例,

    user: tigerwolfc//冒号后面有空格
    

    第三步:在程序中使用配置文件获取参数,比如main.go

    package main
    
    import (
        "io/ioutil"
        "gopkg.in/yaml.v2"
        "fmt"
    )
    
    func main() {
       var c conf
       conf:=c.getConf()
       fmt.Println(conf.Host)
    }
    
    //profile variables
    type conf struct {
        Host string `yaml:"host"`
        User string `yaml:"user"`
        Pwd string `yaml:"pwd"`
        Dbname string `yaml:"dbname"`
    }
    func (c *conf) getConf() *conf {
        yamlFile, err := ioutil.ReadFile("conf.yaml")
        if err != nil {
            fmt.Println(err.Error())
        }
        err = yaml.Unmarshal(yamlFile, c)
        if err != nil {
            fmt.Println(err.Error())
        }
        return c
    }
    

    运行main.go,就可以打印出配置文件中user的值tigerwolfc

    1. toml配置文件的使用方法总结

    TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。需要使用第三方库https://github.com/BurntSushi/toml
    第一步:下载

    go get github.com/BurntSushi/toml
    

    第二部:新建一个toml文件,比如conf.toml

    # id
    ID = 3
    # name
    Name = "TigerwolfC"
    # weight
    Weight = 58
    # books
    Books = ["Golang", "C++", "Python"]
    Sex = true
    #friend Friend都可以
    [friend]
    Age = 28
    Name = "chen_peggy"
    

    细节点:

    • 结构体的成员首字母大写
    • 配置文件的配置项须与结构体成员名一样
    • 支持bool, int, float , 字符串,字符串数组…等,也可以包含其他结构体 如[Friend]
      第三步:在程序中使用配置文件
    package main
    import (
        "fmt"
        "github.com/BurntSushi/toml"
        "log"
    )
    //Person
    type Person struct {
    	ID     uint32	
    	Sex    bool	
    	Name   string	
    	Weight float32	
    	Friend *Friends	
    	Books  []string
    } 
    	
    // friends
    type Friends struct {	
    	Age  int	
    	Name string
    }
    
    func test_toml() {
        var cp Person
        var path string = "./conf.toml"
        if _, err := toml.DecodeFile(path, &cp); err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%v %v\n", cp.Name, cp.Friend.Name)
    }
    func main() {
        test_toml()
    }
    
    /*
    result:
    TigerwolfC  chen_peggy
     */
    --------------------- 
    
    1. json配置文件的使用方法总结

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
    新建一个文件名为conf.json,键入内容:

    {
        "enabled": true,
        "path": "/usr/local"
    }
    

    新建main.go,键入内容:

    package main
    import (
        "encoding/json"
        "fmt"
        "os"
    )
    
    type configuration struct {
        Enabled bool
        Path    string
    }
    
    func main() {
        file, _ := os.Open("conf.json")
        defer file.Close()
        decoder := json.NewDecoder(file)
        conf := configuration{}
        err := decoder.Decode(&conf)
        if err != nil {
            fmt.Println("Error:", err)
        }
        fmt.Println(conf.Path)
    }
    
    1. xml配置文件的使用方法总结
      可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
      新建一个文件名为conf.xml,键入内容:
    <?xml version="1.0" encoding="UTF-8" ?>
    <Config>
       <enabled>true</enabled>
       <path>/usr/local</path>
    </Config>
    

    新建main.go,键入内容:

    package main
    import (
        "encoding/xml"
        "fmt"
        "os"
    )
    type configuration struct {
        Enabled bool   `xml:"enabled"`
        Path    string `xml:"path"`
    }
    func main() {
        xmlFile, err := os.Open("conf.xml")
        if err != nil {
            fmt.Println("Error opening file:", err)
            return
        }
        defer xmlFile.Close()
        var conf configuration
        if err := xml.NewDecoder(xmlFile).Decode(&conf); err != nil {
            fmt.Println("Error Decode file:", err)
            return
        }
        fmt.Println(conf.Enabled)
        fmt.Println(conf.Path)
    }
    
    1. ini配置文件的使用方法总结
      INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中。这种配置文件的文件扩展名多为INI,故名。
      新建一个文件名为conf.ini,键入内容:
    ; A comment line
    [Section]
    enabled = true
    path = /usr/local # another comment
    

    使用第三方库:

    go get gopkg.in/gcfg.v1
    

    新建main.go,键入代码:

    package main
    import (
        "fmt"
        "gopkg.in/gcfg.v1"
    )
    func main() {
        config := struct {
            Section struct {
                Enabled bool
                Path    string
            }
        }{}
        err := gcfg.ReadFileInto(&config, "conf.ini")
        if err != nil {
            fmt.Println("Failed to parse config file: %s", err)
        }
        fmt.Println(config.Section.Enabled)
        fmt.Println(config.Section.Path)
    }
    

    输出:
    true
    /usr/local
    如有不对欢迎指正,相互学习,共同进步。

    展开全文
  • JAVA操作properties配置文件

    万次阅读 2018-07-31 22:41:08
    java中的properties文件是配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式。 &lt;2&gt; 在properties文件中,可以用"#&...
  • JAVA 操作 properties 配置文件

    万次阅读 2016-07-31 11:17:50
    Java中的properties文件是种纯文本格式的配置文件,主要用于表达配置信息,文件类型为 *.properties,文件中内容的格式是 "键=值" 的格式。在properties文件中,可以用井号"#"来作注释。 ...
  • 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。 (一)新建一个java bean...
  • Samba服务器配置文件

    千次阅读 2018-02-23 17:05:32
    在安装了Samba服务软件后,会自动在Linux系统中生成系列的配置文件,了解它们的用途是配置Samba服务器所必须的。这些配置文件包括: l /etc/Samba/smb.conf 这是Samba服务的主配置文件,由全局设置(Global ...
  • 配置文件格式的选择

    千次阅读 2016-02-12 18:38:41
    由于我们开发出来的产品,可能会不同的运行环境,以及不同的用户需求,所以会需要设置不同的运行参数,通常我们需要记住...此时,对于配置文件的内容格式通常有几种选择: 1,二进制文件; 2,文本文件; 3,数据库;
  • Resin的几个常用配置

    万次阅读 2013-01-08 08:28:12
    本文着重介绍resin的几个常用配置 注: 1. 本文并非resin.conf的使用说明,只是从实用角度出发,按需分析常用的配置。更多的内容到官网学习吧; 2. 基于resin3.x的探讨。 (友情提示:刚下载的resin中,...
  • 用JSON做程序配置文件

    千次阅读 2018-01-04 13:09:01
    现在越来越多的软件使用JSON做配置文件,以前一直都使用ini文件做配置管理,写了几个手机端程序,为了统一,准备以后也使用JSON来做配置文件。下面提供一个DELPHI版的简单封装单元,以及使用,欢迎大家一起交流(Q群...
  • Linux 下 yum源配置文件 repo 文件学习

    千次阅读 2018-07-25 15:57:00
    repo 文件是 Linux 中yum源(软件仓库)的配置文件,通常一个 repo 文件定义了一个或者多个软件 仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被 yum读取和应用!   ...
  • 本人没有精力有限,所以弄了一个抢购软件!! 不需要安装Python,不需要配置环境,就和你在电脑上安装使用QQ等软件一样 PS:公众号后台回复 “茅台” 获取抢购软件!! 是 .exe 文件,点击 main.exe 就能运行 但是...
  • 配置Ubuntu软件

    千次阅读 2018-10-14 20:20:17
    Ubuntu系统对这个软件源的配置的信息是放在一个文本文件中的,这个文本文件的完整路径一般是/etc/apt/sources.list。这个文件控制着Ubuntu更新下载软件的来源,通过修改这个文件,我们便可以修改本Ubuntu系统的软件...
  • 文章目录Docker - centos 7 卸载docker ,删除容器,镜像,配置文件1、列出已经安装的docker相关软件2、删掉docker 相关软件3、删除镜像文件,容器等4、删除配置文件等 Docker - centos 7 卸载docker ,删除容器,...
  • Arduino IDE 配置文件

    千次阅读 2015-01-12 11:32:50
    天学习Arduino,我也来发一个帖子。  Arduino开源硬件和Arduino IDE是一个很容易上手的系统,软件和硬件都是搭积木的方式。网络上很多爱好者,为这个“电子积木”开发零件。我们这些学习者和使用者只需要充当...
  • docker-compose.yml 配置文件编写详解

    万次阅读 多人点赞 2018-03-03 08:02:44
    docker compose 在 Docker 容器运用中具有很大的学习意义,docker compose 是一个整合发布应用的利器。而使用 docker compose 时,懂得如何编排 docker compose 配置文件是很重要的。 一. 前言 关于 docker ...
  • Windows系统使用INI配置文件

    千次阅读 2014-11-13 17:57:54
    Windows操作系统将win.ini作为记录当前系统状态,并根据其记录内容对系统进行配置的种便捷的方法,且众多的应用软件也广泛的使用该类型的配置文件来对软件进行记录和配置。 配置设置文件(INI)文件是windows...
  • repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用! YUM的工作原理...
  • Linux下DNS配置文件详解

    千次阅读 2006-12-04 18:38:00
    因此,本文在着重要讨论的是DNS服务器的几个配置文件的配置问题。本文将以REDHAT8.0自带的BIND9.2.1为依据进行讨论。以下是本人这次配置DNS服务器的几个配置文件: /etc/named.conf /在NAMED.CONF配置文件中使用//和...
  • vue-cli的webpack模板项目配置文件分析

    万次阅读 多人点赞 2017-02-14 23:07:25
    由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修改配置的时候不会“太折腾...
  • Centos的yum相关的配置文件主要两种...repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设...
  • VB.Net—配置文件

    千次阅读 热门讨论 2013-06-14 10:06:29
    这次用的是vb.Net,但是自己不熟,刚一上路就遇到了麻烦,那就是:“配置文件”。于是就展开了进一步的学习: 摘要  使用Microsoft.NET开发一个项目时,可能包含了Windows应用程序、Web应用程序、WebService、...
  • PostgreSQL 配置文件postgresql....当然这一切在数据库安装好时都有一个默认值,但是如果你需要对你的数据库进行定制的话,可以对这些数值进行符合需求的修改。 1、配置文件的位置 既然叫配置文件,那么他必须先是一...
  • Nginx-一个IP配置多个站点

    万次阅读 2017-09-03 12:10:48
    对于Nginx,一个IP上配置多个站点还是很常见的。...添加配置文件 疑难杂项 fastcgi_pass Nginxphp-fpm的进程间通信两种方式 总结环境手头上正好一台阿里云学生机,趁着没过期,就拿来用吧。 操作系统:centOS7 p
  • Windows10已使用临时配置文件登录解决解决方案

    千次阅读 热门讨论 2020-08-30 22:18:57
    并且在1控制面板-系统和安全-系统-更改设置-系统属性-高级-用户配置文件 中,旧的配置文件占用空间大,且显示为备份,当前登录的显示临时 2 在设置-账户-同步你的设置中,会显示已使用临时配置文件 解决方案 ...
  • 软件配置管理

    千次阅读 2013-12-05 10:39:45
    转自:... 软件配置管理(Software configuration management,SCM) ...1 什么是软件配置管理2 配置管理的任务3 实施软件配置管理的优点4 配置
  • linux中ftp配置文件详解

    万次阅读 2011-06-14 21:12:00
    vsftpd配置文件采用“#”作为注释符,以“#”开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的“=”两边不要留空格。对于每个配置命令,在配置文件中还列出了相关的配置说明,利用vi...
  • SSH远程登录配置文件sshd_config详解

    万次阅读 2016-06-02 17:42:25
    而在服务器端运行的是一个sshd的服务,通过使用SSH,可以把所有传输的数据进行加密,而且也能够 防止dns和IP欺骗,此外,SSH传输的数据是经过压缩的,可以加快传输速度 其服务器端的配置文件为/etc/ssh/sshd_config...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 533,197
精华内容 213,278
关键字:

一个软件有几个配置文件