C++基础知识小记
最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸起袖子就是干,问了下中软其他项目组搞自动化的同事他们组用的是python来做自动化部署,自己也上网也搜了下一些开源的框架,以及自动化部署工作流程,也大致了解了下现在项目的工作流程。现在的项目大致的流程是部署一个ftp服务器用来放置要部署的文件,然后客户端通过ssh登录到ftp服务器,将文件下载到客户端,然后执行cmd命令部署应用。主要涉及了3大知识点:1.C++实现ftp登录 2.C++从ftp服务器下载文件或文件夹 3.执行cmd命令实现部署。
这两天大致的把流程、代码浏览了一下,在看代码的过程中发现大学学的算是皮毛吧。与实战的还是有不一样的地方。也可能是自己没学那么精通。
一、C++中main和_tmain
刚看项目的时候不知道从哪看,想着那就从main函数开始吧,可main函数就是没找到,不过找到了一个有点类似的_tmain函数。自己百度了下才发现_tmain()与main()是一样的,_tmain()是为了支持unicode所使用的main一个别名,既然是别名,应该有宏定义过的,在头文件<tchar.h>中可以找到_tmain的宏定#define _tmain main,所以,经过预编译以后, _tmain就变成main了。
二、在_tmain()函数中的argc和argv[]
当我调试程序的时候一直纳闷远程ftp服务的ip地址、用户名、密码、文件路径是怎么加载的,我开始以为是在数据库中,还使用vs打开了sdf类型的数据库,把数据库中的几个表的数据找了个遍然并卵,没有与这些数据沾边的数据,当我右击项目—>属性乱点时找到了相对应的数据,原来在属性—>配置属性—>调试—>命令参数中。自己又上网找了下,原来argc:argument count,表示传入main函数的参数个数,argv 是 argument vector,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个.argv是指向指针的指针,main函数的第二个参数“char *argv[]“也可以替换为 “char **argv“.
而传参数给main函数有两种方法,第一种方式是在编译环境中设置,右击项目—>属性—>配置属性—>调试—>命令参数,在命令参数中输入,每个参数之间用空格隔开。第二种方式就是使用cmd命令窗体,类似之前在集群redis时使用cmd命令来启动一样传入参数。
三、远程批量部署
今天查了一下开源的自动化部署,向罗工推荐ansible时,罗工要求部署服务器不能依赖其他的,但ansible部署时对window服务器是有限制的,具体可以参考http://www.cnblogs.com/kingleft/p/6391652.html。所以还是只能用AutoDeploy。今天看代码了解了下大致的思路,原来是通过wmi远程控制服务器安装部署应用。wmi这个也是我第一次听到,今天算是涨了姿势。使用wmi可以远程登录、文件拷贝、建立进程、启动服务.可以参考http://blog.csdn.net/iamherego/article/details/11573553。
参考:http://www.cnblogs.com/XiaoJie85/articles/2128111.html
C++基础知识小记的更多相关文章
- EF基础知识小记四(数据库=>模型设计器)
EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...
- Linq基础知识小记四之操作EF
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...
- EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)
一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...
- web基础知识小记
- EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分的实体)
日常开发中,经常会碰到一些自引用的实体,比如系统菜单.目录实体,这类实体往往自己引用自己,所以我们必须学会使用Code First来建立这一类的模型. 以下是自引用表的数据库关系图: ok,下面开始介 ...
- EF基础知识小记五(一对多、多对多处理)
本文主要讲EF一对多关系和多对多关系的建立 一.模型设计器 1.一对多关系 右键设计器新增关联 导航属性和外键属性可修改 2.多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生 ...
- EF基础知识小记三(设计器=>数据库)
本文主要介绍通过EF的设计器来同步数据库和对应的实体类.并使用生成的实体上下文,来进行简单的增删查该操作 1.通过EF设计器创建一个简单模型 (1).右键目标项目添加新建项 (2).选择ADO.Net ...
- EF基础知识小记二
1.EF的常用使用场景 (1).维护一个已经存在的数据库,VS提供了工具帮助我们把数据库中的表和视图等对象导入到实体框架. [数据库=>模型(Database First)] (2 ...
- EF基础知识小记一
1.EF等ORM解决方案出现的原因 因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一 ...
随机推荐
- Linux - rename 批量替换两种模式
模式一: rename sub raw * 模式二: rename 's/sub/raw/g' * sub raw 这里支持一定程序的正则匹配
- tensorflow nan
https://github.com/tensorflow/tensorflow/issues/3212 NaNs usually indicate something wrong with your ...
- async/await的特殊的地方
一:async如果是用于方法声明里,那么要求这个方法的返回值必须是Task.Task<TResult>.void这三种,而且await出现的地方要求其所在的方法必须是async修饰的方法: ...
- 【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import
Pycharm 2016.2执行单元测试遇到如下问题: RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handlin ...
- windows下安装QT并与visual studio 2017搭建开发环境
1.环境搭建 这里并不是说qt必须要和visual studio结合使用,不过用习惯了visual studio开发,继续使用可节省开发时间,并大大提供便利性. 关于安装过程这里不再详细赘述,软件下载 ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介
有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...
- Apktool下载与安装 windows环境
Apktool 下载与安装 百度网盘地址:https://pan.baidu.com/s/1slQBMOl (apktool 2.2.4版本) 更多版本可以从官网https://ibotpeache ...
- 《JavaScript面向对象编程指南》读书笔记②
概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...
- Swift5 语言指南(十三) 方法
方法是与特定类型相关联的函数.类,结构和枚举都可以定义实例方法,这些方法封装了用于处理给定类型的实例的特定任务和功能.类,结构和枚举也可以定义类型方法,它们与类型本身相关联.类型方法类似于Object ...
- 第一篇:服务的注册与发现Eureka(Finchley版本)
一.创建服务注册中心(Eureka) 1. 首先创建一个maven主工程 创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Clo ...