自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux进程间通信之共享内存

摘要:共享内存是System V IPC中最快的进程间通信方式,允许多个进程直接访问同一物理内存区域,实现零拷贝数据传输。通过shmget()创建/获取共享内存,shmat()附加到进程地址空间,shmdt()分离,shmctl()删除。需配合信号量等同步机制防止竞争条件。优点是高速、高效、灵活,缺点是需手动同步和管理。适用于大数据量、高性能要求的进程通信场景,但需注意资源清理和权限设置。典型应用包括频繁通信的多进程数据共享。

2025-12-11 17:08:15 230

原创 Linux进程间通信之消息队列实现篇

基于 2.6.12 内核, 说明 System V 消息队列的核心数据结构、系统调用路径及关键实现. 主要文件:ipc/msg.c。

2025-12-11 13:57:26 561

原创 Linux进程间通信之消息队列

消息队列是一种System V IPC机制,允许进程通过消息进行通信。每条消息包含类型和正文,接收方可按类型选择性接收。消息队列由内核维护,具有持久性直到显式删除。主要特点包括:消息边界明确、一对一消费模式(消息被接收后即删除)、任意进程间通信。通过msgget()创建队列,msgsnd()发送消息,msgrcv()接收消息。1对多通信需发送多条不同mtype的消息。系统调用包括msgget()、msgsnd()、msgrcv()和msgctl(),分别用于创建、发送、接收和控制消息队列。

2025-12-10 15:06:23 793

原创 Linux进程间通信之命名管道(FIFO)实现篇

本文基于 Linux 2.6.12 内核分析 FIFO(命名管道)的实现机制。FIFO 复用普通管道的读写路径(fs/pipe.c),主要区别在于创建/打开语义和 inode 持久性。关键数据结构包括 pipe_inode_info(含固定16个缓冲区)和分离的读写操作结构(read_fifo_fops/write_fifo_fops)。创建流程通过 sys_mknod() 建立 S_IFIFO 类型 inode,首次 open() 时初始化管道缓冲区。

2025-12-10 14:13:52 616

原创 Linux进程间通信之命名管道(FIFO)

命名管道(FIFO)是一种特殊文件,允许任意进程通过文件系统路径进行通信。它通过mkfifo()创建,支持阻塞和非阻塞模式操作。FIFO具有单向通信特性,数据在内核缓冲区传输,不写入磁盘,性能接近普通管道。优点是跨进程通信简单高效,缺点是单向传输且需处理阻塞问题。适用于需要简单进程间通信的场景,但不适合复杂消息传递需求。

2025-12-09 17:08:07 658

原创 Linux进程间通信之管道(pipe)实现篇

Linux 内核中管道的实现机制涉及文件系统、VFS 和内存管理等核心子系统。其核心数据结构是 pipe_inode_info,包含环形缓冲区、读写指针和同步机制等组件。管道使用 16 页(64KB)的环形缓冲区存储数据,通过 head/tail 指针管理读写位置,并采用互斥锁和等待队列实现同步。

2025-12-09 16:47:46 837

原创 Linux进程间通信之管道(Pipe)

Linux管道机制摘要 管道是Linux中基本的进程间通信方式,主要用于有亲缘关系的进程间单向数据流传输。其核心特性包括:单向性、FIFO顺序、阻塞机制和64KB的默认缓冲区。通过pipe()系统调用创建管道,返回读写两个文件描述符。父子进程通常各关闭一端实现单向通信。相关API包括read()/write()进行数据传输,fcntl()设置非阻塞模式,close()关闭描述符。典型应用场景如父子进程通信,示例展示了父进程写入、子进程读取的基本模式,以及非阻塞I/O的实现方法。管道简单高效,但仅限于亲缘进程

2025-12-08 16:07:35 665

原创 TCP连接状态详解/同时打开Simultaneous Open

TCP连接建立与终止过程详解:本文系统介绍了TCP协议连接状态转换机制,包含三次握手和四次挥手全过程。TCP连接经历11种标准状态,包括CLOSED、LISTEN、ESTABLISHED等基础状态,以及FIN_WAIT、TIME_WAIT等重要过渡状态。特别分析了CLOSING这种双方同时关闭的罕见状态特征,并配有时序图和状态转换图说明。对于连接建立过程,详细描述了从CLOSED到ESTABLISHED的三次握手状态转换;对于连接终止,则完整展示了主动/被动关闭方的四次挥手流程,重点解释了TIME_WAIT

2025-09-01 17:23:08 804 2

原创 Linux ARP老化机制/探测机制/ip neigh使用

Linux ARP状态机与老化机制解析 Linux内核中的ARP协议采用状态机机制管理邻居可达性,包含8种核心状态:NUD_INCOMPLETE(解析中)、NUD_REACHABLE(可达)、NUD_STALE(陈旧)、NUD_DELAY(延迟)、NUD_PROBE(探测)、NUD_FAILED(失败)、NUD_NOARP(无需ARP)和NUD_PERMANENT(永久)。状态转换通过基础时间参数(如30秒可达时间)和探测参数(3次重试)控制。主机在四种场景下会发送ARP报文:地址解析、状态维护、冲突检测和

2025-09-01 17:01:53 1239

原创 ET模式+非阻塞I/O+EPOLLEXCLUSIVE深度解析

摘要:ET模式+非阻塞I/O+EPOLLEXCLUSIVE提供高效并发处理方案。ET模式仅状态变化时触发,减少epoll_wait唤醒;非阻塞I/O确保数据完整读取,避免线程阻塞;EPOLLEXCLUSIVE解决惊群效应,确保单线程处理事件。三者协同显著降低CPU占用和锁竞争,适用于Web服务器等高并发场景。需注意必须配合非阻塞I/O循环读取至EAGAIN,并合理处理事件重注册和异常情况。

2025-08-25 11:51:00 770

原创 python+vue扫盲

在 Python + Vue 的开发模式中, Node.js 的作用是作为 Python 的后端服务器,用于处理 Python 的请求和响应,同时与 Vue 进行通信以实现动态数据更新和页面渲染。通过此架构,项目既保留了 Vue 的现代开发体验,又利用了 Python 后端的简洁部署能力,适合中小型应用的快速开发。即使后端是 Python,构建 Vue 的生产静态资源(HTML/CSS/JS)也需要 Node.js 运行。:单页应用(SPA)、大型动态应用、跨平台开发(React Native)

2025-08-14 16:17:22 1184

原创 阿里云服务器+N2N搭建远程办公环境

利用N2N搭建远程办公环境。

2022-04-08 16:37:35 4612

原创 IP/掩码地址转换

IP/掩码格式转换的方案子网掩码位数转换为点分表示#!/bin/ashprefix_to_mask() {num=$((4294967296 - 2**(32-$1)))for i in `seq 3 -1 0`doecho -n $((num / 256**i))num=$((num % 256**i))if [ "$i" -eq "0" ]; thenechoelseecho -n .fidone}# examplemask=$(

2020-08-20 13:55:11 1004

原创 SaltStack安装及入门

SaltStack安装及入门简介SaltStack简称salt,是一个配置管理工具,类似Ansible、Chef和Puppet,可以用脚本批量操作多台机器。有如下几个特点:部署简单、方便;支持大部分UNIX/Linux及Windows环境;主从集中化...

2020-01-15 17:09:33 374

原创 Ubuntu桌面图标快捷方式以root用户启动

Title: Ubuntu桌面图标快捷方式以root用户启动(16.04)与桌面图标相关的几个文件夹/usr/share/icons 系统图标文件夹/usr/share/applications 系统快捷方式文件夹~/.local/share/applications 用户菜单文件夹~/.local/share/icons 用户图标文件夹点击图标以root用户运行程序很多应用程序在...

2019-06-03 11:01:51 8474 2

原创 Ubuntu 64位编译32位程序

title: Ubuntu 64位编译32位程序背景一般情况下,一个平台上只能编译当前平台对应的应用程序,比如,64位平台编译64位应用程序,但是随着64位平台的普及,多数采用了64位操作系统,而有时又基于某些原因需要编译出32位的应用程序.本文旨在说明如何在64位操作系统上编译出32位应用程序.准备确认主机为64位架构的内核,应该输出为amd64$ dpkg --print-ar...

2019-05-20 17:39:24 2764

原创 lua字节码混淆与反编译

title: luadec相关的一些总结背景在做openwrt相关的路由器时,为了更好的保护lua脚本的代码,通常会选择采用luac进行混淆,这样就需要稍微研究一下如何进行混淆和解密。本文所使用的混淆是lua源代码中带的luac,解密采用的是viruscamp/luadec 的解密工具。混淆、解析和反编译的前提是对文件格式的定义是一致的,因而一般需要把格式定义在lua解释器的源码中,并在适当...

2019-05-20 17:21:27 13162

原创 python获取当前系统类型:os.name, sys.platform, platform.system对比

在很多情况下,需要在python中获取当前系统的类型,用于判断是unix/windows/mac或者java虚拟机等,python中提供了os.name, sys.platform, platform.system等方式,但是起初并不知道各个函数之间的区别以及在什么情况下用那种。函数简介首先,分别对每个函数进行说明,明确其提供的能力,以及如何使用。os.name官方文档(v...

2018-08-10 11:14:51 24210 2

原创 python学习笔记(七)---多线程

依据廖雪峰官方网站的python教程整理 #!/usr/bin/env python3# -*- coding: utf-8 -*-__author__ = "KingRumn"''' 多线程编程,'''import timeimport threading# Python的标准库提供了两个模块:_thread和threading,# _thread是低级...

2018-08-06 14:22:44 300

原创 python学习笔记(六)---多进程

依据廖雪峰官方网站的python教程整理 fork进程import os# 多进程# Unix/Linux操作系统提供了一个fork()系统调用,os.fork()封装了fork系统调用,windows系统无法使用'''print('Process (%s) start...' % os.getpid())pid = os.fork()if pid == 0: ...

2018-08-06 14:22:17 348

原创 python学习笔记(五)---基础IO操作

依据廖雪峰官方网站的python教程整理 #!/usr/bin/env python3# -*- coding: utf-8 -*-__author__ = "KingRumn"''' 基础IO操作 文件读写、StringIO、BytesIO、文件和目录操作、序列化'''from io import StringIOfrom io import Byte...

2018-08-06 14:21:46 286

原创 python学习笔记(四)---高级OOP

依据廖雪峰官方网站的python教程整理 #!/usr/bin/env python3# -*- coding: utf-8 -*-__author__ = "Kingrumn"''' 高级OOP __xx__ 特殊属性的用法 枚举类 元类 多重继承'''from enum import Enum, unique# 正常情况下...

2018-08-03 09:51:57 318

原创 python学习笔记(三)---类与多态

依据廖雪峰官方网站的python教程整理 #!/usr/bin/env python3# -*- coding: utf-8 -*-r''' 类: 类和实例,访问控制,继承、多态'''__author__ = "Kingrumn"import types# 定义类# 通过class关键字定义类# class后面紧接着是类名,即Student,类名通常是大写开...

2018-08-03 09:26:23 277

原创 python学习笔记(二)---高级特性

#!/usr/bin/env python3# -*- coding: utf-8 -*-r''' 高阶知识 lrn_higher_list: 切片、迭代、列表生成式、生成器、迭代器 lrn_higher_func: 函数式编程,修饰器、匿名函数、筛选器等'''__author__ = 'Kingrumn'''' 第1行和第2行是标准注释,第1行注释...

2018-08-02 15:49:09 372

原创 python学习笔记(一)---基础知识

依据廖雪峰官方网站的python教程整理 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000#!/usr/bin/env python3 # 首行必须指明所需要的解释器,否则无法通过./xx.py的方式执行# -*- coding: utf-8 -*- ...

2018-08-02 15:48:04 667

原创 hexo 简介

基本介绍Hexo是一个快速/简洁/高效的博客框架,使用Markdown作为渲染引擎解析文章,结合丰富的主题,分分钟生成绚丽的静态网页,是博客写作的首选。.├── _config.yml # 站点配置文件├── node_modules # 中间产物├── package.json # 应用程序信息,包括markdown渲染器等├── public ...

2018-08-02 15:44:04 1418

原创 hexo 添加标签和分类

整个过程分类 与 标签 极其类似,只需要将对应的categories换成了tags 即可创建页面新建一个页面命名为categories$ hexo new page categories #tags编辑页面编辑新建的页面source/categories/index.md---title: 分类date: 2018-04-25 22:34:08...

2018-08-02 15:42:49 7654 2

原创 利用hexo+googlepages搭建个人博客

背景各种各样的博客五花八门,但是利用github构建个人看起来很有逼格,在其他地方积累的并不多,因此花了2天的时间研究了一下如何依靠github构建个人博客。 - 主流的个人博客工具包括hexo,jekyll,wordpress等,具体的优劣建议参考:https://www.jianshu.com/p/c4f145fdd637 - 个人最终选择了git + github + hexo的方案...

2018-08-02 15:40:46 510

原创 Ubuntu 使用记录

安装Ubuntu操作系统是个费事费力的活,把一些基本的记录放在这里,便于以后参考背景DISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"切换软件源备份并替换/etc/apt/sources.list的源内容(/et...

2018-08-02 15:37:46 528

原创 vim复制内容到剪贴板

问题背景VIM使用过程中需要将内容直接复制到系统剪贴板,使用场景:在vim编辑过程中,需要将某些内容直接复制,并粘贴到博客或gedit中;在2个窗口中分别用vim编辑,此时无法通过vim操作完成,只能借助系统剪贴板解决方案判断支持性首先需要检查vim是否支持系统剪贴板$ vim --version | grep "clipboard"> -clip...

2018-08-02 14:43:43 2872

原创 修改rm命令以避免误删

问题重现是否碰到过如下情况:写了一个月的代码,没有做本地提交,手滑来了个rm -rf,然后就没有然后了。并没有注意一个名叫~的文件夹,有一丢丢洁癖的自己习惯性的rm -rf ~,一回车,世界突然安静。… …大概的解决方案都是1. 找个地方,2. rm改为mv, 实现rm时把文件直接mv到这个地方,3. 提供清空回收站/查看回收站文件/找回误删文件等的操作。基本需求基...

2018-08-02 14:27:41 1020

原创 Yolo安装(Ubuntu14.04)

最近在同事的建议下想要学习一下深度学习的知识,作为环境搭建的第一步,配置Yolo环境。电脑不支持CUDA,该环境仅用来学习,故未对CUDA进行配置和支持。 在环境配置过程中也遇到一些问题,记录以作参考。经验总结做一件事的时候,最基础的是去官网按照说明走一遍,往往这才是最官方的,也是最正确的,出了问题才去其他地方寻找答案如果开源的代码出了问题,不妨先在Github上搜一搜看看有没有...

2018-08-02 14:24:42 1569 2

原创 win7+vs2010下开发32位和64位程序glut配置方法

虽然做了一段时间OPENGL的开发,博主仍然算是一个小菜,最近折腾glut配置开发64位的程序,差点折腾死我。把我的经验写下来,仅供参考,也可以防止后来人犯同样的错误。一、glut库的下载。32位版的很好找,网上一找一堆,可是64位版的相对比较难找,更有人说glut不支持64位的开发,搞的小菜一度想放弃。就在我快要放弃的时候,一个大神跳出来跟我说,纳尼,谁说没有64bit的??!!不多...

2014-01-02 17:09:12 8101 1

入门级GLSL教程

本教程讲授如何使用GLSL进行着色器编程,

2013-01-31

glut32bit和64bit版

glut的32位和64位版,找了好久才找到的。这里面放了debug和release两种格式,请选择使用。

2014-01-02

glut库源码

glut的源码,下载后直接生成,可以生成debug/release,32bit和64bit,超级实用。

2014-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除