1.SecureCRT
? ?1.1SecureCRT支持SSH*(SSH1和SSH2),安裝的過程不在贅述
? ?1.2與SecureCRT相關的Linux命令
? ? ?rz和sz是Linux同windows進行ZModem文件傳輸的命令行工具。
? ? sz命令利用ZModem協議來從Linux服務器傳送文件到本地,一次可以傳送一個或者多個文件
? ? rz命令從本地上傳到Linux服務器。
? ? 要使用rz和sz命令需要查看是否 有lrzsz軟件包。
? ? ? ?
? ? ?如果沒有則需要利用yum進行安裝
? ?
? ?快捷鍵:復制命令:Ctrl+Insert,粘貼命令:Shift+Insert
2.gcc編譯四個階段
?預處理階段。去掉注釋,進行宏替換(#define 相關),頭文件(#include)包含等工作。
? gcc ?-E test.c -o test.i
編譯階段。編譯器將文本文件.i翻譯成文本文件test.s,他包含一個匯編語言。匯編語言程序中的每一條語句都以一種標準的文本格式確切的描述了一條低級機器語言指令。
它可以為不同的高級語言的不同編譯器提供通用的輸出語言。
gcc -S test.o -o test.s
?匯編階段。匯編器將.s翻譯成機器語言指令,吧這些指令打包成一種叫做可重定位目標程序的格式,并將結果保存在目標文件test.o中。
gcc -c test.c -o test.o ? ?
鏈接階段。包含各函數庫的入口,得到可執行代碼。
gcc ?test.c -o test.o ? ?
3.Linux文件后綴名
.c ? c源代碼
.C ?.cc C++源代碼
.h ?頭文件
4.gcc選項
優化:目標是使代碼性能更有,去掉冗余代碼。
-O(0/1/2/3)
gdb調試:-g(0/1/2/3)
提示警告:-Wall
將警告當成錯誤:-Werror
在命令中指定宏:-D
指定頭文件位置:-I
使用C版本:-std=c99等等
5.小常識
1.系統定義的頭文件路徑:
/usr/include
/usr/local/include
/usr/target/include
庫文件:
/lib
查看庫文件:ldd?
ldd ./test
2. ?編譯時默認鏈接 c 庫,如果要全用其它的庫,編譯時要用-l
例如:gcc o test test.c –lm -lc
其中m表示math庫,c表示c函數庫
3.命令行參數
選項:-l -a -i
如果命令行的選項很多,怎么來提取這些選項呢?不需要我們知道命令行參數的順序。此時應該首先提取命令工行參數列表。
getopt:短選項,只有一個字符
getlongopt:長選項,一個字符串
#include <unistd.h>
? ?int getopt(int argc, char * const argv[],?const char *optstring);?
? ?int getopt(int argc, char * const argv[],?const char *optstring);?
一下全局變量配合getopt函數
extern char *optarg;
? extern int optind;
? extern int optopt;
? extern int opterr;
? extern int optind;
? extern int optopt;
? extern int opterr;
實際上,在命令行中,可以支持這樣命令輸入的信息:
?選項:一個選項一般完成不同的功能的操作。
?參數:在執行相應選項功能操作時輸入的信息。
?-a:選項:表示所有。
?-h host_id: h 就是一個選項,但 host_id 實際上是一個 IP,也就是 h 的參數。
?選項:一個選項一般完成不同的功能的操作。
?參數:在執行相應選項功能操作時輸入的信息。
?-a:選項:表示所有。
?-h host_id: h 就是一個選項,但 host_id 實際上是一個 IP,也就是 h 的參數。
為了識別命令行的輸入信息,第 1 個參數為 main 的 argc,第 2 個參數為 main 提供的 argv[],getopt
? ?函數第三個參數約定:
?(1)如果就是一個字符,表示某個選項。
?(2)如果一個字符后有 1 個冒號,表示選項后面一定要跟一個參數。參數可以緊跟選項或者與選
? 項相隔一個空格。
?(3)如果一個字符后有 2 個冒號,表示選項后面可有有一個參數,也可以沒有參數,在選項后的
? 參數一定不能跟它以空格間隔。
? ?函數第三個參數約定:
?(1)如果就是一個字符,表示某個選項。
?(2)如果一個字符后有 1 個冒號,表示選項后面一定要跟一個參數。參數可以緊跟選項或者與選
? 項相隔一個空格。
?(3)如果一個字符后有 2 個冒號,表示選項后面可有有一個參數,也可以沒有參數,在選項后的
? 參數一定不能跟它以空格間隔。
例如 getopt 函數第三個參數為以下值:
? ?“ab:c::d::”
? ?a 后面 沒有冒號,是一個選項。
? ?b 后面有冒號,其后的內容一定要有理解為參數。
? ?c 和 d 雙冒號,其后的內容可以有,也可以沒有,但如果有,則這個參數一定堅挨著。
? ?因此如下:
? ?./getopt –a –b host –chello –d world
? ?具體 getopt 怎么來解釋我們的選項和參數。
? 每成功執行一次,將返回當前的一個選項。并且
? extern char *optarg; //指向下一個要掃描的參數。
? extern int optind; //索引為下一個要處理的指針的下標。
? extern int optopt; //用于存儲可能的錯誤或不可知的信息
? extern int opterr; //opterr== 0,不將錯誤輸出的標準錯誤輸出設備。
? ?“ab:c::d::”
? ?a 后面 沒有冒號,是一個選項。
? ?b 后面有冒號,其后的內容一定要有理解為參數。
? ?c 和 d 雙冒號,其后的內容可以有,也可以沒有,但如果有,則這個參數一定堅挨著。
? ?因此如下:
? ?./getopt –a –b host –chello –d world
? ?具體 getopt 怎么來解釋我們的選項和參數。
? 每成功執行一次,將返回當前的一個選項。并且
? extern char *optarg; //指向下一個要掃描的參數。
? extern int optind; //索引為下一個要處理的指針的下標。
? extern int optopt; //用于存儲可能的錯誤或不可知的信息
? extern int opterr; //opterr== 0,不將錯誤輸出的標準錯誤輸出設備。
長選項:這個選項由一個字符串組成,在選項很多的時候更容易記憶。getopt_long extern char *optarg; extern int optind, opterr, optopt; #include int getopt_long(int argc, ? ? char * const argv[], const char *optstring, //當前支持的短選項列表,同 getopt const struct option *longopts, //長選項列表信息 int *longindex); struct option { const char *name; ? ?//長選項名 int has_arg; //是否有參數 int *flag; int val; //返回值,短選項值 };?
例如期望當前進程支持以下選項方式:
短選項 長選項
-h --help
-o filename --output filename
-v --version
第三個參數:
ho:v
第四個參數
strcut option my_option=
{ {“help”,0,NULL,’h’},?
{“output”,1,NULL,’o’},?
{“version”,0,NULL,’v’}}
要求:
寫一個命令行選項解析的程序。支持以下功能:
(a) -a 選項(--all 長選項),后面可以跟參數
(b)-d 選項(--dir 長選項),后面不跟參數
(c)-h 選項(--help 長選項),后面不跟參數
(d)-o 選項(--output 長選項),后面必須跟一個參數