Linux系统编程基础知识(笔记)


一、VMware虚拟机ip地址改变

解决方法:

1.编辑—>虚拟网络编辑器

1
2.点击右下角 更改设置©
2

3.点击VMnet8 NAT模式—>点击右下角DHCP设置
4

4.改变结束地址,或者改变租用时间
(1)改变结束IP地址,使之与起始IP地址仅相差一位。(仅在只使用一个虚拟机的情况下可行)
(2)改变时间为63天

4


二、GCC

1.GCC

(1)原名为GNU C语言编译器,是由GNU开发的编程语言器。
(2)编译过程:
Linux课程
//图片来自牛客-高境老师
源代码(.h/.c/.cpp)经过预处理器—>预处理后源代码(.i)通过编译器—>汇编代码(.s)经过汇编器—>目标代码(.o)通过连接器—>可执行程序(.exe/.out)

(3)预处理阶段:
去掉注释,拷贝头文件内容,宏替换。对以#开头的指令和特殊符号进行处理。

2.安装命令

sudo apt install build-essential

3.查看版本

//gcc一般用于c,g++用于c++
gcc-v
gcc --version   
g++ -v
g++ --version  

4.常用参数

-E //预处理指定源文件,不进行编译
-S//编译指定源文件
-c//编译、汇报指定源文件
-g//在编译的时候,生产调试信息,该程序可以被调试器调试
-o [file1][file2]//
[file2] -o [file1]//将文件file2编译成可执行文件file1


三、Linux常用命令

ls      //列出当前目录下的文件
cd      //进行目录切换
mkdir   //建立新的目录
rmdir   //用来删除已建立的目录
rm      //删除文件
mv      //移动目录或文件,引申功能为重命名
cat     //查看文件内容
grep    //查找某个字符串,常用于分析一行的信息
cp      //复制文件
ps      //查看进程情况
kill    //向进程发送终止信号
top     //查看操作系统的信息

四、GDB

gdb 可执行程序         //启动gdb

quit / q             //退出

set args x1  x2      //给程序设置参数

show args            //获取设置参数

help                 //GDB使用参数

list / l             //查看当前文件代码

b / break 行号       //设置断点
//b 函数名        
//b 文件名       
//b 文件名:函数 

i b               //查看断点
d 断点编号         //删除断点

//运行GDB程序
start           //程序停在第一行
run             //遇到断点才停

四、man命令

  man命令是一个帮助命令,可以帮助查看指令帮助、配置文件帮助和编程帮助等信息。
//man(选项)(参数)
//选项
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
//参数:
数字:指定从哪本man手册中搜索帮助; 关键字:指定要搜索帮助的关键字。

例如:

man ls //查看ls命令手册,在第一章
man 2 open //查看手册中第二章的open

五、进程相关指令

//查看进程
ps aux
ps ajx   

//实时显示进程动态
top

//列出所有信号
kill -l


进程间的五种通信方式:管道、消息队列、共享内存、信号量、Socket。

六、管道数据通信

1、半双工: 是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一个方向上的传输存在。

2、单工: 是指消息只能单方向传输的工作方式。发送端和接收端的身份是固定的,发送端只能发送信息,接收端只能接收信息,数据信号仅从一端传送到另一端,即信息流是单方向的。

3、全双工: 全双工是指在通信的任意时刻,线路上可以同时存在A到B和B到A的双向信号传输。比如,电话机则是一种全双工设备,其通话双方可以同时进行对话。

七、共享内存

1.共享内存: 共享内存允许两个或更多进程访问同一块内存。
2.内存映射: 是指将磁盘文件的数据映射到内存,用户修改内存就能修改改磁盘文件。
3.操作命令:

//ipcs用法
ipcs -a    //打印当前系统中所有的进程间通信方式的信息
ipcs -m    //打印出使用共享内存进程间通信方式的信息
ipcs -q    //打印出使用消息队列进程间通信方式的信息
ipcs -s    //打印出使用信号进行进程间通信方式的信息
//ipcrm用法
 ipcrm -M shmkey    //移除用shmkey创建的共享内存段
 ipcrm -m shmid     //移除用shmid标识的共享内存段
 ipcrm -Q msgkey    //移除用msqkey创建的消息队列
 ipcrm -q msqid     //移除用msqid标识的消息队列 

八、网络编程

1.特殊地址:

0.0.0.0            //对应当前主机
255.255.255.255    //当前子网的广播地址

2.:
(1)ip 4个字节.
(2)port(端口) 2个字节,范围0~65535(2^16-1)
(3)周知端口: 0~1023,注册端口:1023 ~ 49151,动态端口:49152 ~65535

3.网络模型:
1.OSI七层参考模型: 应表会传网数物(上到下)
(1)物理层:定义物理设备标准,传输比特流。
(2)数据链路层:提供介质访问和链路管理,用MAC地址访问介质。
(3)网络层:IP选址及路由选择。
(4)传输层:建立、管理和维护端到端的连接。
(5)会话层:建立、管理和维护会话。
(6)表示层:数据格式化,数据加密。
(7)应用层:为应用程序提供服务。

4.TCP/IP四层模型: 应传网数(上到下)
(1)数据链路层/网络接口层:数、物。
传输数据物理媒介。
地址解析协议ARP、反向地址解析协议RARP。

ARP
RARP
Data Link

(2)网络层:
IP
因特网互联协议IP,因特网控制报文协议ICMP、因特网组管理协议IGMP。

ICMP
IP

(3)传输层:
规定传输协议。
传输控制协议TCP、用户数据报协议UDP.

TCP
UDP

(4)应用层:应、表、会。
为应用进程提供服务。
文件传输协议FTP、超文本传输协议HTTP、网络文件系统NFS.

ping
telnet
OSPF
DNS

5.TCP通信
1.TCP:传输控制协议,面向连接的,可靠的,基于字节流,仅支持单播传输,首部开销最少20个字节。
2.UDP:用户数据报协议,面向无连接,可以单播、多播、广播,面向数据不可靠,首部开销8个字节。
3.采用三次握手建立一个连接,四次挥手来关闭一个连接。
(1)三次握手的目的是保证双方相互之间建立了连接,发生在客户端连接的时候。
(2)三次握手相关知识:

//图片来自牛客-高境老师

在这里插入图片描述
//图片来自力扣-求职突破一本通[校招版]

(3)TCP四次挥手
在这里插入图片描述
//图片来自牛客-高境老师

九、其他

1.阻塞、非阻塞
挂起or返回
(1)阻塞:在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。
(2)非阻塞:如果不能立刻得到结果,则该调用者不会阻塞当前线程,调用者需要定时轮询查看处理状态。
2.同步、异步
拷贝数据:应用程序or内核
(1)同步:就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。
(2)异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

3.Linux上五种I/O模型
阻塞、非阻塞、I/O复用、信号驱动、异步。

4.select/poll/epoll
I/O多路复用机制
1.select:数组遍历。
2.poll:链表遍历。
3.epoll:哈希表回调。
区别:
(1)poll与select不同,poll没有描述符个数的限制,通过一个pollfd数组向内核传递需要关注的事件,pollfd数组只需要被初始化一次。
(2)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。
(3)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把当前进程往设备等待队列中挂一次,而epoll只要一次拷贝,而且把当前进程往等待队列上挂也只挂一次,这也能节省不少的开销。

5.信号驱动
Linux用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,
当IO事件就绪,进程收到SIGIO信号,然后处理IO事件。

6.HTTP协议
1.超文本传输协议(HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
2.请求报文格式:请求首行,请求头,请求空行,请求体。
3.请求方法:
get:获取资源。
post:提交表单的数据。
3.常见响应状态码:

//请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
200 Ok

//请求失败,请求所希望得到的资源未被在服务器上发现。
404 Not Found

//服务器已经理解请求,但是拒绝执行它。
403 Forbidden

// 服务器端在执行请求时发生了错误。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
500 Internal Server Error

7.两种高效的事件处理模式
Reactor和Proactor。
同步I/O实现Reactor,异步I/O实现Proactor。


注:此为 [牛客职集训营](https://www.nowcoder.com/study/live/690) +[力扣](https://leetcode.cn/leetbook/)+[百度](https://www.baidu.com/)笔记。

如有错误,欢迎指出。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值