Linux后台开发编程
月光骆驼
好久不更新了,学到了很多都还没总结,todo已经行成递归了
展开
-
后台核心编程(四):网络编程-套接字类型与协议设置
套接字类型与协议设置1 套接字协议及数据传输特性1.1 套接字的创建1.2 协议族(Protocol Family)1.3 套接字类型(Type)1.4 协议的最终选择(Type) 1 套接字协议及数据传输特性本章仅需了解创建套接字时的 socket 函数。1.1 套接字的创建套接字创建接口函数:#include <sys/socket.h>int socket...原创 2019-06-12 14:28:39 · 233 阅读 · 0 评论 -
后台核心编程(十三):网络编程-优于select的epoll
终于看到了epoll 这个伟大的I/O复用的方法了!!!激动!!!!!!!!!!!!!1 epoll的理解及应用select 复用方法由来已久,因此利用该技术后,无论如何优化程序性能也无法同时介入上百个客户端。这种select 方式并不适合以 web 服务器端开发为主流的现代开发环境,所以需要学习 Linux 环境下的 epoll。1.1 基于 select 的 I/O 复用速度慢的原因前...原创 2019-06-15 17:10:51 · 223 阅读 · 0 评论 -
后台核心编程(十四):网络编程-网络 I/O 模型
网络 I/O 模型1 4种网络 I/O 模型1.1 阻塞 I/O 模型1.2 非阻塞 I/O 模型1.3 多路10 复用模型1.4 异步10 模型 IO ( Input/Output ,输入/输出)是计算机体系中重要的一部分。IO 类外设有打印机、键盘、复印机等;存储类型的设备则有硬盘、磁盘、U 盘等;通信设备有网卡、路由器等。不同的IO 设备有着不同的特点:数据率不一样、传送单位不...原创 2019-06-16 16:05:50 · 159 阅读 · 0 评论 -
后台核心编程(十五):网络编程-网络分析工具
网络分析工具1 ping1.1 ping的使用2 tcpdump2.1 tcpdump介绍2.2 tcpdump使用2.3 tcpdump表达式2.4 tcpdump示例3 netstat 1 pingping ( Packet Internet Groper ,因特网包探索器)是Windows 、UNIX 和Linux 系统下的一个命令。ping 也属于一个通信协议,是TCP/I...原创 2019-06-16 19:20:12 · 278 阅读 · 0 评论 -
后台核心编程(十六):网络编程-多线程服务器端的实现
多线程服务器端的实现1 理解线程的概念1.1 引入线程的背景1.2 线程和进程的差异2 线程创建及运行2.1 线程的创建和执行流程2.2 可在临界区内调用的函数2.3 工作(Worker)线程模型3 线程存在的问题和临界区3.1 多个线程访问同一变量是问题3.2 临界区位置4 线程同步4.1 同步的两面性4.2 互斥量4.3 信号量5 线程的销毁和多线程并发服务器端的实现5.1 销毁线程的 3 种...原创 2019-06-16 21:46:40 · 351 阅读 · 0 评论 -
后台核心编程(十七):进程相关的基本概念
多线程服务器端的实现1 进程的创建与结束2 进程的结束——exit()函数2 僵尸进程 1 进程的创建与结束#include<unistd.h>pid_t fork(void);在讨论 fork() 函数之前,有必要先明确父进程和子进程两个概念。除了。号进程(该进程是系统自举时由系统创建的)以外,Linux 系统中的任何一个进程都是由其他进程创建的。创建新进程的进...原创 2019-06-17 10:28:07 · 116 阅读 · 0 评论 -
后台核心编程(三):网络编程-TCP协议
TCP协议目录TCP协议一、网络模型二、TCP头部二、TCP状态流转三、超时重传四、滑动窗口五、拥塞处理TCP协议一、网络模型七层(IOS)五层四层(TCP/IP)应用层表示层会话层应用层应用层传输层运输层传输层网络层网络层网间层数据链路层数据链路层网络接口(链路层)应用层物理层 ISO七层网络模型及其...原创 2019-06-11 16:43:02 · 326 阅读 · 0 评论 -
后台核心编程(十八):进程间通信方式总结
进程间通信方式总结1 进程间通信(IPC)介绍2进程间通信方式2.1 管道2.2 FIFO(有名管道) 1 进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Stream...原创 2019-06-17 12:20:53 · 274 阅读 · 0 评论 -
让事件飞——Linux eventfd 原理与实战
1. eventfd/timerfd 简介目前越来越多的应用程序采用事件驱动的方式实现功能,如何高效的利用系统资源实现通知的管理的送达就愈发变得重要起来。在Linux系统中,eventfd是一个用来通知事件的文件描述符,timerfd是定时器事件的文件描述符。二者都是内核向用户空间的应用发送通知的机制,可以有效地被用来实现用户空间的事件/通知驱动的应用程序。简而言之,就是eventfd用来触发...原创 2019-07-08 11:14:04 · 587 阅读 · 0 评论 -
后台核心编程(十二):网络编程-多播与广播
1 多播多播(Multicast)⽅式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客⼾端的实现⽅式⾮常接近。区别在于,UDP 数据传输以单⼀⽬标进⾏,而多播数据同时传递到加⼊(注册)特定组的⼤量主机。换⾔之,采⽤多播⽅式时,可以同时向多个主机传递数据。1.1 多播的数据传输方式以及流量方面的优点多播的数据传输特点可整理如下:多播服务器端针对特定多播组,只发送 1 次数...原创 2019-06-15 11:02:43 · 232 阅读 · 0 评论 -
后台核心编程(十一):网络编程-多种I/O函数
1 send & recv 函数1.1 Linux 中的 send & recv⾸先看 send 函数定义:#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);/*成功时返回发送的字节数,失败时返回 -1sockfd: 表⽰与数...原创 2019-06-15 10:05:24 · 225 阅读 · 0 评论 -
后台核心编程(五):网络编程-地址族与数据序列
地址族与数据序列1 分配给套接字的IP地址与端口号1.1 网络地址1.2 网络地址分类与主机地址边界1.3 用于区分套接字的端口号2 地址信息的表示2.1 表示IPV4地址的结构体2.2 结构体 sockaddr_in 的成员分析3 网络字节序与地址转换3.1 字节序(Order)与网络字节序3.2 字节序转换4 网络地址的初始化与分配4.1 将字符串信息转换为⽹络字节序的整数型4.2 将网络字节...原创 2019-06-12 15:21:17 · 230 阅读 · 0 评论 -
后台核心编程(一):编译相关的内容
一、编译与链接编译与链接主要分为四个步骤:预处理、编译、汇编和链接。1 预处理将源代码文件和相关的头文件,如 iostream 等被预处理器 cpp 预处理成 .i 文件。第一步预处理的过程相当于如下命令:g++ -E hello.cpp -o hello.i预处理过程主要处理那些源代码文件只能够的以“#”开始的预编译指令。比如#include 、#define等,主要处理规则有...原创 2019-06-06 21:01:47 · 355 阅读 · 3 评论 -
后台核心编程(二):调试工具
一、stracestrace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。可谓是 linux 下的调试利器,不仅可以用来找程序错误,系统为什么挂死了,命令为什么报错,还可以用来查找哪些程序占用系统资源。比如想跟踪程序webService调用情况:第一步,查看webService进程号: ps aux|grep webService ...原创 2019-06-07 16:22:57 · 235 阅读 · 0 评论 -
后台核心编程(六):网络编程-基于TCP客户/服务端编程
TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字。因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字。TCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过程的控制”。因此,学习...原创 2019-06-13 21:24:12 · 302 阅读 · 0 评论 -
后台核心编程(七):网络编程-基于UDP的服务端/客户端
第 6 章 基于 UDP 的服务端/客户端本章代码,在TCP-IP-NetworkNote中可以找到。TCP 是内容较多的一个协议,而本章中的 UDP 内容较少,但是也很重要。6.1 理解 UDP6.1.1 UDP 套接字的特点通过寄信来说明 UDP 的工作原理,这是讲解 UDP 时使用的传统示例,它与 UDP 的特点完全相同。寄信前应现在信封上填好寄信人和收信人的地址,之后贴上邮票放进...原创 2019-06-13 21:38:06 · 319 阅读 · 0 评论 -
后台核心编程(八):网络编程-套接字的断开连接
套接字的断开连接1 基于TCP的半关闭1.1 单方面断开连接带来的问题1.2 套接字和流(Stream)1.3 优雅断开的 shutdown 函数1.4 为何要半关闭1.5 基于半关闭的文件传输程序1 基于TCP的半关闭TCP的断开连接过程比建立连接更重要,因为连接过程一般不会出现大问题,但是断开过程可能发生预想不到的情况。1.1 单方面断开连接带来的问题Linux 和 Windows 的...原创 2019-06-14 09:33:32 · 667 阅读 · 0 评论 -
后台核心编程(九):网络编程-域名及网络地址
域名系统DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器。提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址在浏览器地址栏输入www.baidu.com,或如图1-1用ping命令获取其IP地址,便可访问百度主页,那么通用域名访问和通过IP访问这二者有何区别?实际上,域名是赋予服务端的虚拟地址,而非实际地址。因此...原创 2019-06-14 09:50:22 · 400 阅读 · 0 评论 -
后台核心编程(十):网络编程-I/O复用之select
1 基于 I/O 复用的服务器端1.1 多进程服务端的缺点和解决方法为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的一种方案,但并非十全十美,因为创建进程要付出很大的代价。这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要采用相对复杂的方法(IPC 属于相对复杂的通信方法)而I/O 复用技术可以解决这个问题。1.2 理解复...原创 2019-06-14 14:24:57 · 294 阅读 · 0 评论 -
多线程编程之读写锁
多线程编程之读写锁读写问题是一个经典的同步问题,主要针对保护很少更新的数据结构这种同步情况。具体的例子:假设有一个用于存储DNS条目缓存的表,它用来将域名解析为相应的IP地址。通常,一个给定的DNS条目将在很长一段时间里保持不变——在许多情况下,DNS条目会保持数年不变。虽然随着用户访问不同的网站,新的条目可能会被不时地添加到表中,但这一数据却将在其真个生命中保持不变。定期检查缓存条目的有效...原创 2019-08-12 20:14:44 · 219 阅读 · 0 评论