阅读笔记《c程序员从校园到职场》第六章配置文件,makefile文件(part2)

CodingNote CodingNote     2022-11-07     165

关键词:

 Contents:

1.配置文件(通常以 ini 结尾)

2.makefile文件 (Linux)

 PS: 这篇文章的内容,不太理解。


 

 一、配置文件

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

参考链接:让你提前认识软件开发(12):配置文件读取及文件操作 

CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/23552667

 

 

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

 

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

 

         (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操作函数为GetFtpConnection和PutFile,对它们的详细说明如下:

 

         (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

 

 

二、Makefile文件

        makefile用于Linux下整个工程的编译,对于Linux下的C/C++语言的编译是至关重要的。

       本文以实际的C源程序为例子,介绍如何使用makefile来编译Linux下的C语言工程,为相关开发工作的开展提供了参考。

 【关键词】

        makefile  C语言  Linux  编译  开发

1、什么是makefile?

        makefile是什么?如果你写的程序只是在Windows下运行,那么很有可能不知道有这个玩意儿。而如果你要在Linux下编译并运行程序,那么你几乎不可避免地要和makefile打交道。

        makefile是一个文件,里面定义了一系列的规则来指定一个工程中的哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更为复杂的功能操作。简单点说,makefile就是Linux下的一个编译调度器。

 

2、makefile的语法规则

        既然是一个编译调度器,那么它就会有自己的一套规则。makefile的规则如下:

       target ... : prerequisites ...

       command

        说明:

       (1) target就是一个目标文件,也就是在这个步骤中,我们想要输出的文件名(可以包括后缀)。

       (2) prerequisites是要生成那个target所需要的文件,相当于在Windows工程下我们要得到exe文件所需要的源代码文件。

       (3) command是make需要执行的命令,也就是如何利用prerequisites来生成target。注意,command行要以TAB键开头。

 

3-5、以一个实际的Linux下的C程序工程(将一个字符串中的小写字母转换成大写字母)为例,介绍makefile的编写方法及用法。

参考:让你提前认识软件开发(17):makefile文件的书写及应用

           CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/24812071

 

6、总结

        本文对makefile文件的语法规则进行了介绍,并用一个实际的C程序工程来说明了它的用法。

        在编写和使用makefile文件的过程中,我们要注意以下问题:

        (1) 要牢记makefile的语法,将不同程序文件的依赖关系理清楚。

        (2) 命令(command)行一定要以TAB键开头,不要误写成了空格。

        (3) 在makefile文件的最后,要将没有用的中间文件(如本例中的.o文件)清理掉。

        (4) 对于make命令中出现的错误或警告,一定要尽量修改。

阅读笔记《c程序员从校园到职场》第二章学校到职场

一、代码规范:1、变量命名(让人一眼看它是什么意思,要做什么操作),定义并初始化2、函数命名规范(函数的功能)在主函数之前进行声明。在实际项目中,一般不在函数调用者的内部来对被调函数进行声明,而是将声明... 查看详情

阅读笔记《c程序员从校园到职场》第五章内存操作(代码片段)

参考:  让你提前认识软件开发(8):memset()与memcpy()函数 https://blog.csdn.net/zhouzxi/article/details/22478081让你提前认识软件开发(10):字符串处理函数及异常保护 https://blog.csdn.net/zhouzxi/article/details/22976307  查看详情

阅读笔记《c程序员从校园到职场》第七章指针和结构体(代码片段)

原文地址:让你提前认识软件开发(13):指针及结构体的使用CSDN博客https://blog.csdn.net/zhouzhaoxiong1227/article/details/23872995 【文章摘要】       指针在C语言中占有很重要的地位,同时也是学习C语言的难点... 查看详情

阅读笔记《c程序员从校园到职场》第三章程序的样式(大括号)(代码片段)

参考:https://blog.csdn.net/zhouzhaoxiong1227/article/details/22820533 一、.初始化数组变量       在实际的软件开发项目中,变量在使用前应初始化,防止未经初始化的变量被引用。      &n 查看详情

c内存操作---自《c程序员从校园到职场》

1. memset andmemcpy /**********************************************/2.strcatandstrncat /*********************************************/3.strcpyandstrncpy /********************* 查看详情

第六章深入理解函数lua程序设计笔记

--第六章深入理解函数Lua中函数是“第一类值”,与其他传统类型有相同的权利:可以储存到变量或table中,可以作为函数实参传递,还可以作为函数的返回值。函数的标准定义:foo=function(x)returnx*2end一个函数定义实际上就是一... 查看详情

读书笔记-js高级程序设计-第六章面向对象的程序设计

 EcmaScript有两种属性数据属性和访问器属性数据属性有4个特性ConfigurableEnumerableWritableValue 前三个值的默认值都为false 举例Object.defineProperty(person,"name",{writable:false,value:"niko"}); 一旦属性定义为不可配置的,就不能再... 查看详情

20171104-构建之法:现代软件工程-阅读笔记3

本周阅读了《构建之法》第六章。第六章讲了敏捷流程的相关知识看了第六章了解到敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个... 查看详情

《javascript高级程序设计》第六章笔记整理

一、创建对象的方法(6种)  1.工厂模式  即用函数来封装以特定接口创建对象的细节。functioncreatePerson(name,age,job){varo=newObject();o.name=name;o.age=age;o.job=job;o.sayName=function(){alert(this.name);}returno;}varperson1=createPerson(‘ 查看详情

《构建之法》阅读笔记

阅读第六章所得: 敏捷过程在我的理解之内是更“圆滑”一些,为了成为敏捷的团队,则需要作出改变:自主管理(从领导布置任务到自己挑选任务,并总结不足,提出改进并且自己要实施这些改进)、自我组织(从做好自... 查看详情

韩松毕业论文笔记-第六章-efficientmethodsandhardwarefordeeplearning

     难得跟了一次热点,从看到论文到现在已经过了快三周了,又安排了其他方向,觉得再不写又像之前读过的N多篇一样被遗忘在角落,还是先写吧,虽然有些地方还没琢磨透,但是paper总是这样吧,毕竟没有... 查看详情

第六章笔记文件权限所有人/组管理

###文件权限### ***文件属性的查看*** ls-lfilename -|rw-r--r--.|1|root|root|  46|Oct 105:03|filename————— —  —— ——   ——  ————  & 查看详情

第六章函数和宏定义(代码片段)

...2.3.计算Ackerman函数掌握递归函数的设计方法;进一步练习阅读检查与调试修改C程序的方法。6.4.3.1.编写 查看详情

javascript高级程序设计(第3版)第六章读书笔记

第六章面向对象的程序设计1.数据属性[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。默认值为true。[[Enumerable]]:表示能否通过for-in循环返回属性。默认值为true。[[Writable]]:表示能否修改属性的值,默认为true。[[Va... 查看详情

从校园到职场,如果是你会和我一样吗?

...章目录写在前面A初入职场--蒙着眼忐忑中向前摸索B回到校园--被时间逼着做出选择C再入职场--眼里有光、心中有理想最后的最后写在前面    关于离开校园后步入职场这个过程,原本早就想写一写的,但大概是半年... 查看详情

《算法图解》第六章笔记(代码片段)

软件环境:Python 3.7.0b4一、算法描述假设你经营着一家芒果农场,需要寻找芒果销售商,以便将芒果卖给他。为此,我们可以通过广度优先搜索算法,在朋友中查找出符合条件的芒果销售商。广度优先搜索是一种用于图的查... 查看详情

《程序是怎样跑起来的》第六章有感

 文件是将数据存储在磁盘等存储媒介中的一种形式。程序文件中存储数据的单位是字节。文件就是字节数据的集合。把文件内容用数据*重复次数的形式来表示的压缩方法称为RLE。经常被用于压缩传真的图像等。图像文件本... 查看详情

android深度探索(卷1)hal与驱动开发第六章 第一个linux驱动程序:统计单词个数读书笔记

本章是一个具体的例子,来详细的介绍开发和测试Linux驱动程序的完整过程。尤其是测试Linux驱动。在这个统计单词个数的实例中,重点是该算法的实现技术:即Linux驱动,而不是如何统计的。6.1Linux驱到底是什么Linux驱动的工作... 查看详情