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
?
轉載于:https://www.cnblogs.com/5ishare/p/6870170.html
總結
- 上一篇: Spring+SpringMVC+MyB
- 下一篇: 防遗忘笔记,Fedora交叉编译wind