郭镫鸿
18610092852
guodh@tarena.con.cn
16156781
Unix环境编程
Unix网络编程(第一卷)(第三版)Richard Steven
Unix网络编程(第2卷)(第3版)Richard Steven
TCP/IP详解 1、2、3卷
OSI模型: TCP/IP(Internet)
应用层 应用层
描述层 传输层
会话层 网络层
传输层 接入层
网络层
数据链路层
物理层
UML(同一建模语言)图,用标准的图形表示-->设计要求等
Rose(Rational)
1、需求分析
用例图,将需求用图形的方式表示出来
详细设计
类图。表示一个接口或类的图形
时序图
g++ -g xx.cpp
gdp a.out
list 看查看程序代码
断点:break 行号或函数名
查看断点:info break
运行:run
下一步:next 可简写成n,执行一句代码,不进入函数
下一步:step 也有下一步的意思,但语句中有函数时,会进入到函数里
显示变量:print 可简写成p,如p x就可显示x的值
继续:continue 运行到下一个断点,如果没有断点就执行到结尾
退出:quit 可简写成q
========================================================================
1、Unix
类Unix操作系统,类似Unix,有Unix发展变化而来的操作系统同称类
Unix,具有很大的相同性和相似性,对程序员提供统一的编程接口。
3、gcc
gcc -v 版本
后缀名
.c 标准C程序
.m 标准的Obiective-C
.mm Objective_C++
.cpp 标准的C++程序
.cc 早期Unix操作系统中的C++源程序
.C .cxx 不常见的C++源程序
.i 经过预处理的C源程序
.h 头文件
.o 编译后的目标文件
.s 汇编源程序
.a 静态对象库文件(archives(档案))
.so 共享对象库文件(Sahred Object)
4、环境变量
是变量,整个变量的值会影响某程序的执行,Linux中和shell相关
如:LANG环境变量的值会影响程序运行环境的语言环境
PATH环境变量,定义执行程序时的搜索路径,保存可执行程序的路径
和gcc相关:
C_INCLUDE_PATH/CPATH 指定头文件的搜索路径
作用和gcc的-I选项相同
5、库文件
C标准库
库(library),在系统中是一个文件(库文件),这种文件的文件名一
定是以lib开头的。静态库以.a结尾,共享库(动态库)以.so结尾
这种文件其实是将一些编译生成的目标文件以某种方式(如打包)形成的
5.1 静态库文件
libxxxxx.a 静态库文件
5.1.1 创建静态库文件
1》写源程序
mymath.c view.c
2》编译
gcc -c mymath.c ==> mymath.o
gcc -c view.c ==> view.o
3》生成静态库
ar -r libmylib.a mymath.o view.o ==>libmylib.a
注意:libmylib.a是库文件名,库名是mylib
4》提供头文件 mymath.h
5.1.2 使用(调用)静态库文件
1》写调用程序 main.c
2》编译程序 gcc -c main.c ==> main.o
3》连接
方式一:直接链接,较少用:
gcc main.o libmylib.a
方式二:配置环境变量LIBRARY_PATH
export LIBRARY_PATH = 库文件所在路径
gcc main.o -l mylib
方式三:不需要配置环境变量,用-L指定库路径
gcc main.o -l mylib -l 库文件所在路径
5.2、共享库文件(Shared Object Library)
5.2.1 创建共享库文件
1》写程序
mymath.c view.c
2》编译
gcc -c -fpic mymath.c ==> mymath.o
gcc -c -fpic view.c ==> view.o
3》链接
gcc -shared mymath.o view.o -o libmylib.so
生成的共享库文件默认有可执行权限,因为共享库文件是需
要调入内存执行的
//2和3可以一起执行
//gcc -fpic -shared mymath.c view.c -o libmylib.so
4》提供头文件
5.2.2 使用(调用)共享库文件
1》写调用程序 main.c
2》编译源程序 gcc -c main.c ==> main.o
3》链接,和链接静态库一样
export LIBRARY_PATH = 库文件路径
gcc main.o -l mylib -L 库文件路径
4》运行时,需要共享库文件所在路径配置到环境变量
LD_LIBRARY_PATH中
export LD_LIBRARY_PATH = 库文件所在路径
6、静态库和共享库文件的区别
6.1、静态库文件本质上是个打包文件,共享库文件本质是一段可以执行的
代码,
6.2、调用静态库文件中的函数时,程序生成的可执行程序会将此函数拷贝
过来,这样,程序运行期间是不需要静态库文件做支持的。如果调用
的是共享库中的函数,那么生成的可执行文件中,只会记录该函数在
共享库文件中的位置,而不会拷贝过来,所以,执行程序时,会将共
享库文件加载到内存中,并调用其中的函数,也就是说,程序运行时
需要共享库文件做支持,怎么找到共享库文件?使用环境变量
LD_LIBRARY_PATH.
6.3、静态库适合库文件规模比较小的情况,大多数情况下,我们会使用共
享库,因为共享库总体占用的内存资源小,不浪费资源。
6.4、共享库会在运行时加载,不需要时可释放,静态库不可以。
7、手动加载共享库并调用函数(很少使用)
========================================================================
1、函数调用的错误处理
1.1、函数如何通知调用者,此次调用是否成功
1》用函数返回值告诉调用者:
0 代表成功
-1 代表失败
C语言中,大部分情况下,函数的运算结果是用参数带回,而函数的返
回值用来判断调用是否成功
2》如果函数的返回值,在正确情况下肯定是非负数,那么
> 0 成功,返回值就是结果
==-1 失败,
3》如果函数返回的是指针:
非空指针: 代表成功
空指针: 失败
有时,返回-1代表失败
4》返回void
较少见,意味着此函数不可能失败
5》其他
1.2、错误处理和errno
1.2.1、#include <errno.h>
#define EACCES 13 //代表权限不够
一个宏(就是一个整数),代表一个错误
全局变量 errno,当函数出错时,代表错误原因的整数会被保存
到errno这个变量中,我们读取errno变量的值就可以知道错误
原因
1.2.2、调用函数后,只能用返回值来判断是否出错,出错后可马上用
errno的值来确定错误原因,但是不能用errno的值是否改变来
判定一个函数调用是否出错
2、环境变量
3、内存管理
STL --- 自动分配和释放
|
C++ --- new/delete
|
C --- malloc/free
|
系统
------------------------------------------------------------
|
类Unix --- sbrk/brk
|
xxx --- mmap
-------------------------------------------------------------
系统内核 ---- kmalloc/vmalloc
---- get_free_page
4、C++和C的内存分配
4.1、new/malloc的区别
new和malloc都会分配空间
new比malloc多做几件事:
1、当用new构造的对象中有成员变量也是对象,先构造对象
2、当new运算符执行结束时,编译器确保调用对象的构造函数
3、new会自动将指定转换成我们需要的类型
4.2、当将程序调入内存开始执行,在内存中就会形成一个进程,进程空间
就可以分为5个区间
代码区:放程序代码,最大特点是只读,有执行权限
全局区:放已经初始化的全局变量,可读写的
BSS段:放未初始化的全局变量,可读写的,特点是:在程序执行之
前BSS段会自动清零,所以未初始化的全局变量在程序执行之
前已经成0;
堆区:自由区,想何时分配和释放内存空间都可以,没有限制。
栈区:放局部变量(自动变量) auto int x;
内存分配都是自动进行的,没有办法限制。
3 int i1 = 10; //全局区
4 int i2 = 20; //全局区
5 int i3; //BSS段
6 static int i4 = 40; //全局区
7 const int i5 = 50; //代码区
8 void fa(int i6){ //栈
评论2
最新资源