
Linux系统编程、网络编程
Linux系统编程、网络编程
Liang-Wen-Hao
伪装成程序员的菜鸟
展开
-
Linux中的零拷贝技术
目录引文什么是零拷贝技术(zero-copy)?让数据传输不需要经过user space使用mmap使用sendfile使用splice原文:浅析Linux中的零拷贝技术 https://www.jianshu.com/p/fad3339e3448本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:引文在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中转载 2020-12-08 21:41:32 · 101 阅读 · 0 评论 -
Linux系统编程-面试题:多线程顺序打印输入的字符串
Linux系统编程:多线程顺序打印输入的字符串效果C语言实现#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <sys/stat.h>#include <pthread.h>using namespace std;pthread_mutex_t mu原创 2020-11-19 00:10:28 · 636 阅读 · 0 评论 -
15_libevent
目录1. Libevent1.1 libevent特点1.2 libevent安装2. 事件处理框架 : 创建event_base2.1 创建和检测event_base的API01event_method.c2.2 event_base和fork02event_method.c3. 事件处理框架: 启动event_base循环3.1 设置事件循环 : event_base_dispatch()3.2 终止事件循环(不常用)4. 事件(不带缓冲区的): event4.1 事件的创建、添加、删除4.2 练习:0原创 2020-12-02 21:30:42 · 241 阅读 · 0 评论 -
14_UDP_广播_组播_本地套接字
目录1. UDP1.1.UDP概念1.2.UDP通信流程1.2.1.UDP操作函数1.2.2.通信流程client.cserver.c2. 广播概念UDP广播:通信流程设置广播属性的函数广播的特点:client.cserver.c3. 组播/组播概念&特点组播地址UDP组播:通信流程UDP设置组播属性03_multicast_client.c03_multicast_server.c4. 本地套接字结构体通信流程04_localipc_client.c04_localipc_server.c代码原创 2020-11-17 22:27:42 · 396 阅读 · 0 评论 -
13_epoll的 LT、ET-block socket 、ET-no-block socket
目录1. epoll1.1 epoll的使用1.1.1epoll的函数1.1.2代码client.cserver.c1.2 epoll 的工作模式1.2.1LT模式clinet.cserver.c1.2.2ET模式1.2.3如何设置epoll的边沿模式client.c 同上servic.c ET&&阻塞1.2.4边沿模式下-通信的fd必须设置为非阻塞client.c 同上servic.c ET&&非阻塞2. epoll总结2. epoll总结代码: https://gith原创 2020-11-17 17:40:20 · 477 阅读 · 0 评论 -
12端口复用_select_poll
目录1. 端口复用1.1用途1.2多线程通信的隐患:未设置端口复用1.3设置端口复用:的位置1.4设置端口复用:的函数2. IO多路转接2.1.IO多路转接的概念为什么需要:IO多路转接IO多路转接:核心思想常用的IO多路转接函数3. select和poll的使用3.1 select3.2 select相关函数3.3 select()使用步骤02client.c02select_server.c3.4 poll3.5 poll相关函数client.c03poll_server.c代码: https://g原创 2020-11-16 21:25:17 · 362 阅读 · 0 评论 -
11_tcp三次握手_四次挥手_多进程Server_多线程Server_tcp状态转换
目录1. TCP三次握手2. TCP四次挥手3. TCP滑动窗口4. TCP通信并发1.1多进程 -> client/server 实现1.2多线程 -> client/server 实现2.通信细节(伪代码)5.TCP状态转换总结1.查看网络相关信息的命令代码: https://github.com/WHaoL/study/tree/master/00_06_Linux_SystemCode_and_SocketCode代码: https://gitee.com/liangwenhao/s原创 2020-11-16 14:39:15 · 272 阅读 · 0 评论 -
Linux系统 网络监测工具 tcpdump、netstat
目录Linux系统网络监测工具1. tcpdumptelnetncstracenetstatvmstatifstatmpstatlsofLinux系统网络监测工具1. tcpdump学习视频初识:《kali linux渗透测试》第三十一课.使用TcpDump分析网络流量https://www.bilibili.com/video/BV1uQ4y1K7SS/入门:Tcpdump命令行网络抓包工具 介绍 LinuxCast IT播客https://www.bilibili.com/video/BV原创 2020-11-16 12:30:15 · 247 阅读 · 0 评论 -
10_socket套接字
目录1. 概念1.1、网络设计模式1.1.1 B/S1.1.2 C/S1.2、所谓的服务器开发?1.3、IP和端口1.3.1 IP地址1.3.2 端口1.4、OSI/ISO 网络分层模型2. 协议格式3. socket编程3.1 字节序3.2 IP地址转换3.3 sockaddr数据结构3.4 套接字函数4. TCP通信流程服务器端-通信流程:客户端-通信流程:代码: https://github.com/WHaoL/study/tree/master/00_06_Linux_SystemCode_and原创 2020-11-16 08:40:01 · 212 阅读 · 0 评论 -
09_线程同步_互斥锁_读写锁_条件变量_信号量
目录1. 概念1.1、线程同步1.2、临界资源1.3、临界区2. 互斥锁(互斥量)2.1、互斥锁类型?2.2、互斥锁特点?2.3、互斥锁相关函数3. 死锁3.1、死锁 的几种场景3.1.1、忘记释放锁,自己将自己锁住3.1.2、单线程重复申请锁3.1.3、多线程多锁申请, **抢占锁资源**3.2、死锁的解决4. 读写锁1.读写锁类型? 是几把锁?2.读写锁的特点?3.什么时候使用读写锁?4.操作函数练习/code5. 条件变量 -> condition5.1.1条件变量是锁吗?5.1.2条件变量的两原创 2020-11-15 17:02:11 · 202 阅读 · 0 评论 -
08_守护进程_线程
目录1. 守护进程1.1 守护进程的特点1.2 进程组1.3 会话1.4 创建守护进程的步骤测试题12. 线程2.1、概念2.2、线程之间共享和非共享资源2.2.1.共享资源2.2.2.不共享资源2.3、创建线程2.4、获取当前线程的线程ID2.5、指定使用的线程库2.6、线程退出2.7、回收子线程资源2.8、线程分离2.9、线程取消 -> 杀死子线程2.10、比较线程ID是否相同3. 线程属性1、线程分离(相当于调用了pthread_detach)测试题2代码: https://github.co原创 2020-11-14 00:53:37 · 367 阅读 · 0 评论 -
07_定时器_信号_信号集_注册信号捕捉_处理捕捉到的信号
目录1. 信号相关的概念1.1.Linux中的信号的基本概念1.2.产生信号的场景1.3.察看系统定义的信号列表1.4.查看信号的详细信息1.4.1.信号的默认五种处理动作1.4.2.core文件在默认状态下是不会生成的1.4.3.设置core文件大小1.4.4.core在gdb中的使用信号的几种状态2. 信号相关的函数kill/raise/abortalarm -> 定时器函数程序实际使用时间setitimer -> 定时器函数3. 信号捕捉3.1 信号捕捉函数signal函数-(BSD标准)原创 2020-11-04 20:17:31 · 261 阅读 · 0 评论 -
06_进程间通信
目录1. 概述2. 管道2.1 匿名管道1.匿名管道的特点?2.管道的原理?4.如何创建匿名管道?5.使用匿名管道实现进程间通信6.管道的读写行为?7.如何设置管道非阻塞?2.2 有名管道1.特点2.创建方式 -> 两种使用有名管道进行没有血缘关系的进程间通信3. 内存映射3.1 概念3.2 mmap、munmap函数原型3.3 步骤:有血缘关系的--进程间通信3.4 步骤:没有血缘关系的--进程间通信思考问题代码: https://github.com/WHaoL/study/tree/mast原创 2020-07-25 16:58:26 · 344 阅读 · 0 评论 -
05_父子进程_文件描述符
目录1. 进程概述1.1 程序和进程1.2 并行和并发并行和并发CPU时间片1.3 PCB1.4 进程状态2. 进程创建2.1 进程ID2.1.1 命令2.1.2 函数2.2 进程的创建2.3 父子进程3. 多进程的gdb调试4. exec族函数Qt中的exec族函数5. 进程控制5.1 结束进程5.2 孤儿进程5.3 僵尸进程5.3 进程回收 wait waitpid6. dup,dup2,fcntl函数6.1 dup和dup26.2 fcntl函数代码: https://github.com/WHa原创 2020-07-21 17:59:41 · 33190 阅读 · 0 评论 -
04_Linux文件IO和Linux系统函数
目录1. 文件IO1.1 Linux系统IO和C标准库IO1.标准C库IO函数2.标准C 库IO和 Linux系统IO的关系1.2 虚拟地址空间1.3 Linux系统IO函数perroropen/closereadwritelseek2. Linux其他系统函数1.stat/lstat函数man文档的stat()示例1man文档的fstat()示例2stat() Demo2.文件属性函数1.access()access() Demo2.chmod() chown()chmod() chown() Demo3原创 2020-07-19 15:05:24 · 268 阅读 · 0 评论 -
03_makefile_gdb
目录1. Makefile1.1 文件命名1.2 makefile中的规则1.3 makefile中的知识点1.3.1 工作原理1.3.2 变量1.3.3 模式匹配1.3.4 函数1.4 makefile的编写版本1版本2版本3版本4版本52. GDB调试2.1 调试准备2.2 gdb调试命令1.gdb启动、传参、和退出2.查看代码1.当前文件2.非当前文件3.设置显示的行数3.断点操作1.设置断点2.查看断点3.删除断点4.设置断点无效5.无效断点生效6.设置条件断点4.调试命令1.运行gdb程序2.从当原创 2020-07-18 22:39:14 · 269 阅读 · 0 评论 -
02_vim_gcc_staticLib_dynamicLib
目录1. vim1.1 vim的模式1.2 命令模式1.3 文本编辑模式1.4 末行模式1.5 vim配置文件2.gcc1.1 安装1.2 gcc 工作流程1.3 gcc常用参数选项3 静态库和动态库2.1 扫盲2.2 静态库1. 生成libXXX.a的Makefile2. 使用libXXX.a的Makefile2.3 动态库/共享库查看动态库的依赖解决动态库找不到的错误1. 生成libXXX.so的Makefile2. 使用libXXX.so的Makefile2.4 对比vim插件-vimplus代码:原创 2020-07-18 18:23:29 · 313 阅读 · 0 评论 -
01-linux命令
目录1. Linux介绍1.1 Linux的诞生1.2 Linux发行版1.3 命令解析器2. Linux目录2.1 Linux目录结构2.2 路径2.2.1 绝对路径2.2.2 相对路径3. 文件管理命令3.1 ls命令软链接 VS 硬链接硬链接软链接3.2 cd命令3.3 创建删除目录3.4 cp命令3.5 mv命令3.6 查看文件内容3.7 其他命令tree命令pwd命令touch命令which命令重定向命令 >管道 |4. 用户管理命令4.1 切换用户注意:切换root失败的问题4.2 添加原创 2020-07-18 13:33:14 · 313 阅读 · 0 评论 -
Linux系统编程 1、文件IO、文件属性、文件目录操作函数
目录Linux系统编程 1、文件IO、文件属性、文件目录操作函数1. 文件IO函数1.1 open:打开文件1.2 close:关闭文件1.3 read:读文件1.4 write:读文件1.5 lseek:文件指针偏移1.6 perror:查看错误号2. 文件属性函数2.1 access( ):判断文件权限, 或者文件是否存在2.2 chmod( ):修改文件权限2.3 chown( ):修改文件...原创 2020-04-16 20:14:41 · 727 阅读 · 0 评论