文章目录:

一:协议  

二:网络应用设计模式_BS模式和CS模式

三:网络分层模型(OSI七层 TCP/IP四层)

1.OSI七层

2.TCP/IP四层

四:通信过程

五:协议格式 

1.数据包封装

2.以太网帧格式和ARP数据报格式 

3.IP段格式 

4.UDP数据报格式

5.TCP数据报格式

六:TCP协议

1.TCP通信时序(面向连接的可靠数据通信)

三次握手(发起请求 接受请求)

四次挥手(关闭连接请求)

2.滑动窗口(TCP流量控制)

3.TCP状态转换

4.半关闭

5.2MSL

5.1 程序设计中的问题

5.2 端口复用

6.TCP异常断开

6.1 心跳检测机制

6.2 设置TCP属性

七:网络名称术语

1.路由(route) 

2.以太网交换机工作原理

3.hub工作原理

4.半双工/全双工

5.DNS服务器

6.局域网(LAN) 广域网(WAN)

7.端口

8.MTU

八:LInux编程(VI、GCC、GDB、MAke)的使用

1.VI编辑器的使用

2.gcc的使用

3.GDB调试工具的使用      

4.Make项目管理


学习Linux的网络编程原则上基于:Linux的系统编程 和 Linux基础Shell编程(第十章);除此之外还包含了计算机网络的知识

Linux基础shell编程——>Linux 系统编程——>Linux 网络编程

一:协议  

互联网协议(Internet Protocol Suite)

什么是协议:从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则


典型协议 
    传输层      常见协议有TCP/UDP协议
    应用层      常见的协议有HTTP协议,FTP协议
    网络层      常见协议有IP协议、ICMP协议、IGMP协议
    网络接口层  常见协议有ARP协议、RARP协议


交换机:负责组建局域网,研究的是MAC地址
路由器:负责组建广域网,研究的是IP地址
TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议

UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务

HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议

FTP文件传输协议(File Transfer Protocol)

IP协议是因特网互联协议(Internet Protocol)

ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息

IGMP协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间

ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址

RARP是反向地址转换协议,通过MAC地址确定IP地址

二:网络应用设计模式_BS模式和CS模式

           C/S:Client/Server                            B/S:Browser/Server

优点:	缓存大量数据、协议选择灵活、速度快			安全性、跨平台、开发工作量较小
	

缺点:	安全性差、开发工作量大、跨平台难			    不能缓存大量数据、必须严格遵守http协议

三:网络分层模型(OSI七层 TCP/IP四层)

OSI七层模型结构(我的记忆方法_巫术网传会报应):  物、数、网、传、会、表、应



TCP/IP 4层模型结构:网(链路层/网络接口层)、网、传、应
	应用层:http、ftp、nfs、ssh、telnet。。。
	传输层:TCP、UDP
	网络层:IP、ICMP、IGMP
	链路层:以太网帧协议、ARP、RARP

1.OSI七层

物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等
    它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)
    这一层的数据叫做比特
    【传输介质,负责信号的传输:机械、电子、定时接口通信信道上原始比特流传输】


数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问
    这一层通常还提供错误检测和纠正,以确保数据的可靠传输
    如:串口通信中使用到的115200、8、N、1
    【物理寻址,将原始比特流转变成逻辑传输线路:建立逻辑连接、进行硬件地址寻址、差错校验等功能(由底层网络定义协议)】
    将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正


网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择
    Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层
    【进行逻辑地址寻址,实现不同网络之间的路径选择】
    协议有:ICMP    IGMP    IP(IPV4 IPV6)    ARP    RARP


传输层:定义了一些传输数据的协议和端口号(WWW端口80等)
    如:TCP可靠传输(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
        UDP不可靠传输(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)
       主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段
    【定义传输数据的协议端口号,以及流控和差错校验】
    协议有:TCP    UCP,数据包一旦离开网卡即进入网络传输层


会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路
    主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)
    【建立、管理、终止会话(在五层模型里面已经合并到了应用层)】
    对应主机进程,指本地主机与远程主机正在进行的会话


表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取
    例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC)
         而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符
    如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换
    【数据的表示、安全、压缩(在五层模型里面已经合并到了应用层)】
    格式有:JPEG    ASCLL    DECOIC    加密格式等


应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务
       【网络服务与最终用户的一个接口】
        协议有:HTTP    FTP    TFTP    SMTP    SNMP    DNS    TELNET    HTTPS    POP3    DHCP

2.TCP/IP四层

应用层:应用层负责处理特定的应用程序细节。几乎各种不同的 TCP/IP实现都会提供下面这些通用的应用程序:
            Telnet 远程登录
            FTP 文件传输协议
            SMTP 简单邮件传送协议
            SNMP 简单网络管理协议
       【mac地址】
    

传输层:主要为两台主机上的应用程序提供端到端的通信
       在TCP/IP 协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)
            TCP为两台主机提供高可靠性的数据通信(可靠)
                它所做的工作包括把应用程序交给它的数据分 成合适的小块交给下面的网络层,
                确认接收到的分组,设置发送最后确认分组的超时时钟等由于运输层提供了
                高可靠性的端到端的通信,因此应用层可以忽略所有这些细节
             UDP则为应用层提供-种非常简单的服务(不可靠)
                它只是把称作数据报的分组从一谷主机发送到另一台主机,但并不保证该数据报能到达另一端
                任何必需的可靠 性必须由应用层来提供。这这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到
       【可靠和不可靠传输:目标端口和原端口】


网际层:处理分组在网络中的活动,例如分组的路由
       在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议,以及IGMP协议(Internet组管理协议)
       【路由器:目标IP和原IP】


网络接口层:通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡
           它们一起处理与电缆(或其他任何传输媒介)的物理接口细节
       【交换机和传输介质:目标mac地址和原mac地址】

TCP与UDP区别
    1、TCP面向连接(如打电话要先拨号建立连接)
       UDP是无连接的,即发送数据之前不需要建立连接


    2、TCP提供可靠的服务(可靠安全)
            也就是说,通过Tcp连接传送的数据,无差错,不丢失,不重复,目按序到达
            Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输
            如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制
       UDP尽最大努力交付,即不保证可靠交付(不可靠不安全)


    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信


    4、每一条TCP连接只能是点到点的
       UDP支持一对一,一对多,多对一和多对多的交互通信


    5、TCP对系统资源要求较多
       UDP对系统资源要求较少

四:通信过程

网络传输数据封装流程:C/S案例

数据没有封装之前,是不能在网络中传递。

数据-》应用层-》传输层-》网络层-》链路层  --- 网络环境


只有应用层协议在用户态可见,往下的都处在内核中(什么是内核?)

五:协议格式 

1.数据包封装

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)

2.以太网帧格式和ARP数据报格式 

以太网帧协议:根据mac地址,完成数据包传输
            以太网帧中的目的地址和源地址是指MAC地址


ARP协议(数据报格式):根据 Ip 地址获取 mac 地址

3.IP段格式 

版本: IPv4、IPv6  -- 4位

TTL: time to live 。 设置数据包在路由节点中的跳转上限。每经过一个路由节点,该值-1, 减为0的路由,有义务将该数据包丢弃

源IP: 32位。--- 4字节		192.168.1.108 --- 点分十进制 IP地址(string)  --- 二进制 

目的IP:32位。--- 4字节





IP:是一个协议,是计算机在网络中互联互通的规则
IP地址:是IP实现互联互通的一个策略


IP地址:软件地址;广域网中通信(用于网络间的通信)
MAC地址:硬件地址;局域网中通信


IPV4:32位二进制 以点分割,分为4段十进制数 a.b.c.d
IPV6:128位二进制 以冒号分割,分为8段十六进制数 a:b:c:d:e:f:g:h


子网掩码:区分IP地址的网络位和主机位
    A.255.0.0.0
    B.255.255.0.0
    C.255.255.255.0
    D.255.255.255.255

    网络位:掩码对应的IP位的二进制部分,全为1的部分是网络位
    主机位:掩码对应的!P位的二进制部分,不全为1的部分是主机位

    拥有相同网络位的计算机属于同一网段


IPV4地址分类:网络的类型决定了-IP地址将如何划分成网络部分和节点(主机)部分
    设计因特网的人决定根据网络规模创建网络类型
        A:对于少量包含大量节点的网络,他们创建了A类网络
            1-126
        C:对于另一种极端情况的网络,他们创建了C类网络,用来指示大量只包含少量节点的网络
            192-223
        B:介于超大型和超小型网络之间的是B类网络
            128-191
        D:D类是多播地址
            224-239
        E:E类为保留地址,用于研究
            240-255


IPV6分类
    单播地址(Unicast Address
        用来唯一标识一个接口,类似于IPv4中的单播地址。发送到单播地址的数据报文将被传送给此地址所标识的一个接口

    组播地址(Multicast Address )
        用来标识一组接口(通常这组接口属于不同的节点),类似于IPv4中的组播地址。发送到组播地址的数据报文被传送给此地址所标识的所有接口

    任播地址(Anycast Address)
        用来标识一组接口(通常这组接口属于不同的节点)
        发送到任播地址的数据报文被传送给此地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口,一对最近

4.UDP数据报格式

16位源端口号                                        16位目的端口号

                         序号

                         确认序号

数据偏移  保留     URG/ACK/PSH/RST/SYN/FIN       窗口


            检验和                              紧急指针

                        选项和填充(从这开始往上是首部)

                        数据
IP地址:可以在网络环境中,唯一标识一台主机

端口号:可以网络的一台主机上,唯一标识一个进程
       多数应用程序使用5000以下的端口(80端口:http协议)

ip地址+端口号:可以在网络环境中,唯一标识一个进程

5.TCP数据报格式

16位:源端口号                             16位:目的端口号

                       32序号

                       32确认序号

4位首部长度   保留6位 URG/ACK/PSH/RST/SYN/FIN  16位窗口大小


       16位检验和                             16位紧急指针

                        选项(从这开始往上是报头)

                        数据

六:TCP协议

1.TCP通信时序(面向连接的可靠数据通信)

三次握手(发起请求 接受请求)

主动发起连接请求端,发送 SYN 标志位,请求建立连接。 携带数据包(序号)包号、数据字节数(0)、滑动窗口大小

被动接受连接请求端,发送 ACK 标志位,同时携带 SYN 请求标志位。携带序号、确认序号、数据字节数(0)、滑动窗口大小

主动发起连接请求端,发送 ACK 标志位,应答服务器连接请求。携带确认序号

四次挥手(关闭连接请求)

主动关闭连接请求端, 发送 FIN 标志位

被动关闭连接请求端, 应答 ACK 标志位		 ----- 半关闭完成(单向 写入读取)


被动关闭连接请求端, 发送 FIN 标志位

主动关闭连接请求端, 应答 ACK 标志位		 ----- 连接全部关闭

2.滑动窗口(TCP流量控制)

介绍UDP时我们描述了这样的问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据

TCP协议通过“滑动窗口(Sliding Window)”机制解决这一问题

采用滑动窗口增大传输速率
滑动窗口:发送给连接对端,本端的缓冲区大小(实时),保证数据不会丢失

批量发送,服务器ACK回执最后一个数据包,且可以看到,滑动窗口的大小win是动态变化的

mss:最大报文长度

3.TCP状态转换

打开方式:                 被动打开(左 虚线)             主动打开(右 实线)

上边(三次握手)           被动接收连接请求端              主动发起连接请求端

下边(四次握手)           被动关闭连接请求端              主动关闭连接请求端

TCP状态时序图:结合三次握手、四次挥手 理解记忆


    主动
	    1. 主动发起连接请求端:	CLOSE -- 发送SYN -- SEND_SYN -- 接收 ACK、SYN -- SEND_SYN -- 发送 ACK -- ESTABLISHED(数据通信态)

	    2. 主动关闭连接请求端: ESTABLISHED(数据通信态) -- 发送 FIN -- FIN_WAIT_1 -- 接收ACK -- FIN_WAIT_2(半关闭)
				-- 接收对端发送 FIN -- FIN_WAIT_2(半关闭)-- 回发ACK -- TIME_WAIT(只有主动关闭连接方,会经历该状态)
				-- 等 2MSL时长 -- CLOSE 

    被动

	    1. 被动接收连接请求端: CLOSE -- LISTEN -- 接收 SYN -- LISTEN -- 发送 ACK、SYN -- SYN_RCVD -- 接收ACK -- ESTABLISHED(数据通信态)

	    2. 被动关闭连接请求端: ESTABLISHED(数据通信态) -- 接收 FIN -- ESTABLISHED(数据通信态) -- 发送ACK 
				-- CLOSE_WAIT (说明对端【主动关闭连接端】处于半关闭状态) -- 发送FIN -- LAST_ACK -- 接收ACK -- CLOSE


    重点记忆: ESTABLISHED、FIN_WAIT_2 <--> CLOSE_WAIT、TIME_WAIT(2MSL)

	    netstat -apn | grep  端口号

4.半关闭


	通信双方中,只有一端关闭通信。  --- FIN_WAIT_2

	close(cfd);

	shutdown(int fd, int how);	
		how: 	
            SHUT_RD	关读端
			SHUT_WR	关写端
			SHUT_RDWR 关读写

	    shutdown在关闭多个文件描述符应用的文件时,采用全关闭方法。close,只关闭一个

5.2MSL

5.1 程序设计中的问题

	一定出现在【主动关闭连接请求端】。 --- 对应 TIME_WAIT 状态。

	保证,最后一个 ACK 能成功被对端接收。(等待期间,对端没收到我发的ACK,对端会再次发送FIN请求。)

5.2 端口复用

在server的TCP连接没有完全断开之前不允许重新监听是不合理的:虽然是占用同一个端口,但IP地址不同

// 设置端口复用	
    int opt = 1;		

//表示允许创建端口号相同但IP地址不同的多个socket描述符:在server代码的socket()和bind()调用之间插入如下代码
    setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(opt));

6.TCP异常断开

6.1 心跳检测机制

定义:心跳检测机制是指在TCP长连接中,客户端和服务器之间定期发送一种特殊的数据包,通知对方自己还在线,以确保TCP连接的有效性

应用于:长连接保活或需要保活的场景,比如监控系统、IM系统、即时报价系统、推送服务等

6.2 设置TCP属性

设置TCP属性的方法如下:
    1.在电脑桌面上右键点击网络,选择属性进入
    2.页面跳转以后进入到网络和共享中心,点击以太网进入
    3.在出现的以太网属性页面中点击属性按钮进入
    4.此时在打开的对话框中可以看到TCP/IPV4没有被勾选,勾选该选项以后点击确定按钮即可开启启用TCP/IP

七:网络名称术语

1.路由(route) 

路由(名词)
    数据包从源地址到目的地址所经过的路径,由一系列路由节点组成
路由(动词)
    某个路由节点为数据包选择投递方向的选路过程



路由器的工作原理是根据路由表转发数据,主要过程如下:
    1.主机要发送数据到目的主机,因为是跨网通信,所以必须通过网关(通过ARP广播找到E0端口的MAC地址)
      路由器收到数据包后,解封装数据包,发现里面的目标IP为4.1,查找路由表
        ARP广播——>E0端口(MAC地址)
        路由器——>数据包(目标IP为4.1)——>查找路由表
    2.路由器A查找路由表后,转发数据到S0接口
        路由器A——>查找路由表——>发数据到S0接口
    3.路由器A通过ARP广播找到B路由器S0口的MAC地址后,将数据转发过去
        路由器A——>ARP广播——>B路由器(S0口的MAC地址)——>发数据
    4.数据包到达B路由器后,查看目标IP地址并查找路由表,B路由器查找路由表发现4.0网段在E0接口,转发数据到E0接口
        接收数据——>B路由器——>查看目标IP地址并查找路由表(现4.0网段在E0接口)——>转发数据到E0接口
    5.数据通过ARP广播找到主机4.1的MAC地址,然后将数据包转发过去,这样主机4.1就成功接收到数据包了
        ARP广播(发数据)——>主机4.1的MAC地址——>接收到数据包



路由表(Routing Table)
    路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径


路由条目
    路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成
    如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址


缺省路由条目
    路由表中的最后一行,主要由下一跳地址和发送接口两部分组成
    当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址


路由节点
    一个具有路由能力的主机或路由器
    它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包

2.以太网交换机工作原理

以太网交换机的工作原理:
    广播帧时:向所有端口转发
    单播帧时:检查目的地址并对应MAC地址表
              如果存在目的地址则转发;如果不存在则泛洪(广播)

    交换机分割冲突域:每个端口独立成一个

    大量数据发送时:先存储等待发送的数据到寄存器中,再发送

    相同目的地址的帧:若交换机有相同目的地址的帧,则将该主机的MAC自动添加到MAC地址表中

3.hub工作原理

定义:Hub是计算机网络中的一个术语,指的是网络中的中央连接点
      它汇集了其他设备(如计算机、打印机、服务器等)的通信信号,并将其分发给这些设备


作用
    Hub通常是一个硬件设备,其作用是将多个设备连接到一个网络上,从而使它们能够相互通信
    在计算机网络中,Hub是一个重要的组成部分。它可以通过交换机、路由器等设备将多个网络连接在一起,从而形成一个更大的网络
    Hub可以将数据传输到网络中的每个设备上,从而使这些设备能够相互通信和共享资源


工作原理:当一个数据包从某个端口进入HUB时,HUB会将该数据包复制到其他所有端口上,使得所有连接的设备都可以接收到该数据包。这种广播行为称为“泛洪”

4.半双工/全双工

Full-duplex(全双工)全双工是在通道中同时双向数据传输的能力


Half-duplex(半双工)在通道中同时只能沿着一个方向传输数据

5.DNS服务器

定义:DNS服务器是域名系统的缩写,即Domain Name System,它是进行域名和与之相对应的IP地址转换的服务器



作用:DNS服务器可以将域名转换为相应的IP地址,它主要的功能就是查询主机名(域名)对应的IP地址



分类:DNS服务器可以分为3种
    主域名服务器(Master DNS)、辅助域名服务器(Slave DNS)、高速缓存服务器(Cache-only server)

6.局域网(LAN) 广域网(WAN)

局域网(LAN)local area network
    举例:一种覆盖一座或几座大楼、一个校园或者一个厂区等地理区域的小范围的计算机网
    特点
        1.覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内
        2.使用专门铺设的传输介质进行联网,数据传输速率高(10Mb/s~10Gb/s)
        3.通信延迟时间短,可靠性较高



广域网(WAN)wide area network
    举例:一种用来实现不同地区的局域网或城域网的互连,可提供不同地区、城市和国家之间的计算机通信的远程计算机网
    特点
        1.适应大容量与突发性通信的要求
        2.适应综合业务服务的要求
        3.开放的设备接口与规范化的协议
        4.完善的通信服务与网络管理
        5.覆盖的范围比局域网(LAN)和城域网(MAN)都广
        
    广域网的通信子网主要使用分组交换技术
        广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网
        它将分布在不同地区的局域网或计算机系统互连起来,达到资源共享的目的
        如互联网是世界范围内最大的广域网

7.端口

逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535
比如用于浏览网页服务的80端口,用于FTP服务的21端口等等

    1.端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的
    2.客户端只需保证该端口号在本机上是唯一的就可以了。客户端口号因存在时间很短暂又称临时端口号
    3.大多数TCP/IP实现给临时端口号分配1024—5000之间的端口号。大于5000的端口号是为其他服务器预留的


我们应该在自定义端口时,避免使用well-known的端口。如:80、21等等

8.MTU

MTU:通信术语 最大传输单元(Maximum Transmission Unit,MTU)
    是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)
    最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)

以下是一些协议的MTU:
    FDDI协议:4352字节
    以太网(Ethernet)协议:1500字节
    PPPoE(ADSL)协议:1492字节
    X.25协议(Dial Up/Modem):576字节
    Point-to-Point:4470字节

八:LInux编程(VI、GCC、GDB、MAke)的使用

1.VI编辑器的使用

各种模式
    命令行模式、普通模式、一般模式
    文本输入模式、编辑模式、插入输入模式
    末行模式、指令模式
 

启动: vi 

命令行模式-编辑模式:a/i/o等( i插入,a追加,o插入行)
    插入命令:i
    附加命令:a
    修改命令;c
    取代命令:r
    替换命令:s
    行操作:dd(删除), u(撤消), y(复制), p(粘贴)

从文本模式返回:esc

切换到末行模式:在命令行模式输入:





末行模式:
    w                保存当前编辑文件
    w!               强行保存
    w newfile        保存为newfile文件有的话会提示你要不要覆盖
    q                退出vi,返回到shell,如果没有保存会提示你还没有保存
    q!               不保存退出,强制退出
    wq               先保存再退出
    x                同命令行模式下的ZZ功能
显示vi中的行号
    在末行方式下输入命令se nu(set number的缩写)
滚屏命令
    ctrl+U:将屏幕向前(文件头方向)翻滚半屏
    ctrl+D:将屏幕向后(文件尾方向)翻滚半屏
    在命令前加上一个数字n:屏幕向前、后翻滚n行(这个值会被系统记住)
分页命令
    ctrl+F:将屏幕向文件尾方向翻滚一整屏(即一页)
    ctrl+B:将屏幕向文件头方向翻滚一整屏(即一页)
    在命令前加上一个数字n:屏幕向前、后翻滚n页(这个值会被系统记住)

2.gcc的使用

编译步骤: 预处理、编译、汇编、连接
 
基本用法:gcc [option] [filename]
 
选项:
  -c  只编译不链接
  -o  指定输出文件
  -O  编译优化
  -g  包含调试信息
  -ldir 指定包含头文件的目录
  -Ldir 指定包含的库所在的目录


编译
    vi  liu.c
    gcc liu.c
    ./a.out

3.GDB调试工具的使用      

  file  装入文件
  quit  退出
  run   运行
  list  列出源程序
  break 设置断点
  watch 监视表达式或变量
  print 输出
  step  进入函数单步运行
  next  不进入函致单步执行
  cont  继续运行

4.Make项目管理

makemakefile
make和makefile的关系是:make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令
根据Makefile文件编译源代码、连接、生成目标文件、可执行文件

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是--“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

解包软件daotar zxf xxxx.tgz
配置cd xxx
./configure ....
编译make
安装与卸载sudo make install
make uninstall
清理make clean
Makefile: 编译多个文件的批处理文件,可识别哪些文件已经修改,并只编译这些文件
          维护当前项目中各文件的依赖关系,makefile的构成make要创建的目标文件
 
常用的make目标
    Clean: 清除编译中间文件
    Install: 安装文件,并设置相关权限
    Uninistall: 删除目标文件
    Depends: 设置Makefile文件中目标所需要的依赖关系
 
日期/时间系统调用
    头文件:  #include <time.h>    
    asctime:  将时间和日期以字符串格式表示
    ctime:  将时间和日期以字符串格式表示
    gettimeofday: 取得目前的时间
    gmtime: 取得目前时间和日期
    localtime:  取得当地目前时间和日期
    mktimc: 将时间结构数据转换成经过的秒数
    settimeofday: 设置目前时间
    time: 取得目前的时间

Logo

更多推荐