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 长选项),后面必须跟一个参数