
Linux系统编程
文章平均质量分 86
Warrior-K
冲!(ง •̀_•́)ง
展开
-
Linux网络编程:I/O复用
文章目录1. IO多路复用2. 分类2.1 Select模式2.2 Poll模式2.3 Epool模式线程过多会占用很多的资源:在空间方面,线程是有内存开销的,1000个线程就要512M或2G内存;在时间方面,线程切换是有CPU开销的,大量线程会让时间花在上下文切换。1. IO多路复用IO多路复用: 多个网络连接复用一个IO线程使用一个线程来检查I/O流(Socket)的就绪状态。通过记录跟踪每个I/O流(Socket)的状态,来同时管理多个I/O流 。多个Socket复用功能是在内核驱原创 2021-10-28 21:53:49 · 317 阅读 · 0 评论 -
Linux网络编程:Socket编程网络模型
文章目录1. OSI七层模型2. 总结3. TCP/IP四层模型1. OSI七层模型No.模型功能1物理层比特流传输2数据链路层网络控制、链路纠错3网络层寻址,路由4传输层建立主机端到端的连接5会话层建立、维护和管理会话6表示层格式转化,加密解密7应用层提供应用程序间通信常见物理层协议:模型e.g.串口/COM口RS-232(仪表接口,智能仪表);RS-485(联网仪表接口)并行/L原创 2021-08-23 11:10:30 · 280 阅读 · 0 评论 -
Linux网络编程:Socket编程接口(3)UDP下的网络编程
文章目录原创 2021-08-22 22:00:55 · 417 阅读 · 0 评论 -
Linux网络编程:Socket编程接口(2)TCP下的网络编程
文章目录3. 完成TCP网络编程3.1 完善3.2 属性3.3 多个客户端的和单个服务器通信3.4 代码格式化工具astyle3. 完成TCP网络编程三次挥手的阶段:四次挥手的阶段:3.1 完善从终端输入 ip 地址和端口号,使用 int argc 和 char* argv[]需要多条信息的发送和接收,使用无限循环为了不受输入堵塞的影响,让客户端和服务器之间多发消息,收发信息用各自的进程客户端开一个进程,让父进程写子进程读服务器也开一个进程,让父进程读子进程写(或者用线程 threa原创 2021-08-18 16:58:55 · 375 阅读 · 0 评论 -
Linux网络编程:Socket编程接口(1)TCP下的socket操作
文章目录1. 接口1.1 转换操作1.1.1 字节序转换操作1.1.2 IP地址转换操作1.1.3 主机名转换操作1. 接口1.1 转换操作转换操作主要分为三类:字节序转换操作、IP地址转换操作和主机名转换操作1.1.1 字节序转换操作网络序转主机序函数含义作用ntohs()network to host short把unsigned short类型从网络序转换到主机序ntohl()network to host long把unsigned long类型从网络原创 2021-08-18 10:34:27 · 395 阅读 · 0 评论 -
Linux网络编程:Socket编程概念
文章目录1. 套接字1.1 协议域 domain1.2 类型 type1.3 协议 protocol1.4 网络连接的5个要素2. 协议2.1 TCP (Transmission Control Protocol)三次握手/四次挥手数据传送问题2.2 UDP (User Datagram Protocol)3. 路径3.1 IP3.2 端口4. 字节序1. 套接字socket 是一个编程接口socket 是一种特殊的文件描述符1.1 协议域 domain参数含义AF_INET原创 2021-08-16 20:35:46 · 1114 阅读 · 1 评论 -
Linux系统编程:左右值引用、万能引用、完美转发
文章目录1. 左值引用、右值引用2. 移动构造函数、移动赋值运算符重载2.1 不可拷贝对象的移动2.2 可拷贝对象的移动1. 左值引用、右值引用右值: 只能在 = 右边使用的值字面量、中间结果、临时对象/匿名对象无法取地址,不能使用左值引用左值: 可以在 = 左边使用的值编程,观察现象:#include <iostream>using namespace std;void Print(int n){ cout << n << endl;原创 2021-08-16 10:48:05 · 168 阅读 · 0 评论 -
Linux系统编程:线程池编程
文章目录1. 构成1.1 任务队列 `job_queue`1.2 工作线程 `worker`1.3 线程池 `thread_pool`2. 流程3. 实例 为什么使用线程池? 频繁创建和销毁线程浪费CPU资源 线程是什么? 一堆线程放在一个池子里统一管理1. 构成类似于银行柜台的流程1.1 任务队列 job_queue作用: 存放待处理的任务成员:构成接口处理函数void *(*)(void*)参数void *arg队列指原创 2021-08-15 16:54:17 · 462 阅读 · 2 评论 -
Linux系统编程:多线程同步
文章内容1. 信号量2. 互斥量1. 信号量为了使总进程和子线程两者之间可以有序的打印,对上一篇文章末尾的程序添加信号量用同一个数p,主进程p从3开始递增5次,线程p从3开始递减10次#include <pthread.h>#include <unistd.h>#include <iostream>#include <semaphore.h>using namespace std;sem_t sem; // 全局变量vo原创 2021-08-14 20:12:24 · 197 阅读 · 0 评论 -
Linux系统编程:多线程编程
文章目录1. 什么是线程2. 操作2.1 线程的并发2.2 共用变量2.3 线程合并1. 什么是线程线程是比进程更小的能独立运行的基本单位,线程基本上不拥有系统资源一个进程下可以开多个线程,这些线程是并发的查看线程命令命令含义ps -T -p -T开启线程查看top -H -p -H开启线程查看文件书写文件含义/proc/{PID}/task/线程默认的名字和进程名相同/proc/{PID}/task/{tid}/comm线程名原创 2021-08-13 21:47:46 · 157 阅读 · 0 评论 -
Linux系统编程:IPC信号量
文章内容1. 信号量2. 函数创建信号量信号量:用于解决数据竞争,如同火车道上的信号灯,用来管理共享火车道(共享内存)1. 信号量分类:分类取值e.g.二值信号量0 和 1指示锁计数信号量0 和 n停车场电子牌操作:PV 测试和增加查看: man sem_overview接口头文件: semaphore.h库: pthread2. 函数操作函数创建sem_t *sem_open(const char *name, i原创 2021-08-13 15:28:17 · 215 阅读 · 0 评论 -
Linux系统编程:IPC共享内存
文章内容1. POSIX 共享内存2. 函数2.1 创建内存映射1. POSIX 共享内存查看:共享内存一般生成在 ls /dev/shmls /dev/ 看到绿色的文件都是用来通信的接口:头文件: sys/mman.h库: librt.so2. 函数操作函数创建int shm_open(const char *name, int oflag, mode_t mode)删除int shm_unlink(const char *name)建立内存映射v原创 2021-08-12 20:55:32 · 261 阅读 · 0 评论 -
Linux系统编程:IPC消息队列
文章内容1. POSIX 消息队列2. 函数2.1 创建消息队列2.2 写入消息队列2.3 读取消息队列2.4 获取队列信息1. POSIX 消息队列查看:POSIX消息队列预览 man mq_overview消息队列一般生成在 ls /dev/mqueue接口:头文件: mqueue.h库: librt.so(real time)结构体:struct mq_attr 消息队列属性成员含义说明mq_flags标志在mq_open时被初始化,在mq_seta原创 2021-08-11 21:13:33 · 321 阅读 · 0 评论 -
Linux系统编程:管道
文章内容1. 管道简介2. 匿名管道2.1 单工管道1. 管道简介匿名管道:一般用于父子进程FIFO管道/命名管道:一般用于两个独立的进程通过命令的方式实现管道:发送文件:send.cpp#include<iostream>using namespace std;int main(int argc,char* argv[]){ for(int i=1;i<argc;++i){ cout << argv[i] &l原创 2021-08-11 11:03:34 · 800 阅读 · 0 评论 -
Linux系统编程:进程基础
文章内容程序与进程虚拟存储器/虚拟地址空间gdb调试功能进程状态常用命令程序与进程进程:运行中的程序虚拟存储器/虚拟地址空间gdb调试功能步骤操作意义1g++ test.cpp -g编译时加 -g2gdb ./a.out开始调试3list查看断点4b 5断点加在第5行5info proc mapping查看内存区域的映射6nnext走到下一步7p handle查看handle的地址8q退出进程状原创 2021-07-18 16:29:06 · 752 阅读 · 1 评论