linux
文章平均质量分 84
CoreDump丶
一枚学生党
展开
-
k8s编程operator实战之云编码平台——③Code-Server Pod访问实现
在上一节中实现了controller的逻辑,可以通过grpc来创建、删除工作空间以及查询信息。接下来要实现的就是如何访问到工作空间,我们就采用反向代理的方式,反向代理服务器就使用nginx。 openresty是一个基于nginx和luajit的web平台,我们可以通过它来实现动态的反向代理。接下来将会逐步实现。原创 2022-12-14 17:58:05 · 1077 阅读 · 0 评论 -
Golang源码探究 —— 网络轮询器netpoller
网络通信是服务端程序必不可少也是至关重要的一部分,基于TCP Socket的通信则是网络编程的主流。TCP Socket是最常见的网络编程,在POSIX标准发布后,Socket得到了各大主流操作系统平台很好的支持。 Go是自带运行时的跨平台编程语言,Go的net包中暴露给开发者的Socket也是建立在操作系统原生socket接口之上的。netpoller是Go语言用来屏蔽各个操作系统底层高效I/O多路复用的网络轮询器,它屏蔽了各个操作系统底层不同而且复杂的I/O多路复用的使用,在上层为我们提原创 2022-10-12 22:10:55 · 1547 阅读 · 0 评论 -
Linux网络编程修改内核参数
修改主机能打开的最大文件描述符数量、修改主机可用端口范围原创 2022-10-12 20:13:30 · 293 阅读 · 0 评论 -
云vscode搭建--使用容器化部署
本文主要介绍了云vscode的搭建,使用docker来部署code-server,并解决了无法访问容器中启动的服务器的问题。原创 2022-09-03 20:42:56 · 2181 阅读 · 1 评论 -
Linux进程间通信(Linux IPC)
在Linux下由很多种进程间通信的方式,在下面主要介绍七种,分别是:匿名管道(PIPE)、命名管道(FIFO)、信号、共享内存映射、共享内存、消息队列、信号量、UNIX域套接字。原创 2022-06-04 18:32:28 · 5669 阅读 · 0 评论 -
shell脚本学习笔记
1、脚本的基本写法第一部分:指定解释器(必写)# 表示以下内容会被bash解析#!/bin/bash 注意:如果将解释器路径写死在脚本里,可能在某些系统里就会存在找不到解释器的兼容性问题,所以可以写成:#!/bin/env bash注释使用 #第二部分 :具体的代码逻辑第一个脚本: hello.sh#!/bin/env bash# 输出hello,worldecho "hello,world"echo "hello,world"echo "hello,world"原创 2021-11-01 20:43:44 · 407 阅读 · 0 评论 -
Docker学习笔记——Dokcer 网络/Compose/Swarm
Docker服务启动时会首先在主机上自动创建一个docker0虚拟网桥,实际上是一个Linux网桥,它在内核层连通了其它的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。网桥可以理解为一个软件交换机,负责挂载其上的接口之间进行包转发。使用 ifconfig命令可以查看: 同时,Doc原创 2021-10-30 16:53:49 · 598 阅读 · 0 评论 -
Docker学习笔记——Docker基础
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker的构想是要实现“Build, Ship and Run Any App, Anywhere原创 2021-10-27 22:43:23 · 2619 阅读 · 2 评论 -
Ubuntu20.04安装Docker
安装Docker依次在终端中输入以下命令:# 1、安装必要工具sudo apt-get updatesudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common# 2、安装GPG证书curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# 3、写入软件源信原创 2021-10-22 15:03:06 · 470 阅读 · 0 评论 -
使用VSCode和CMake开发、调试Linux C++
在介绍VSCode环境搭建前,需要对GCC编译器和CMake有一个了解。1、GCC编译器Vscode是通过调用GCC编译器来编译C/C++程序的,因此需要对GCC有一个基本的了解。1.1 编译过程C/C++程序的编译可以分为四步:1)预处理 Pre-Processing# 预处理主要是头文件的展开以及宏定义的替换g++ -E test.cpp -o test.i 2)编译 Compiling# 编译是将经过预处理后的文件编译成汇编文件。g++ -S test.i -o te原创 2021-10-12 15:49:26 · 2102 阅读 · 3 评论 -
高性能定时器3——时间轮
在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等,将所有定时器串联起来,以.原创 2021-10-09 17:24:16 · 1108 阅读 · 0 评论 -
C/C++内存检测工具valgrind--memcheck
Valgrind简介Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核 —— 一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测,我们可以使用它的工具:Memcheck。Valgrind安装方法 1. valgrind官网:http://valgrind.org下载方法 2. Ubuntu: sudo apt-get install原创 2021-10-09 16:24:56 · 2878 阅读 · 0 评论 -
高性能定时器2——红黑树实现
在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等,将所有定时器串联起来,以.原创 2021-10-08 20:26:28 · 672 阅读 · 0 评论 -
高性能定时器1——最小堆实现
高性能定时器1——时间堆 在网络程序中我们通常要处理三种事件,网络I/O事件、信号以及定时事件,我们可以使用I/O复用系统调用(select、poll、epoll)将这三类事件进行统一处理。我们通常使用定时器来检测一个客户端的活动状态,服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此我们需要将每个定时事件分别封装为定时器,并使用某种容器类数据结构,比如:链表、排序链表、最小堆、红黑树以及时间轮等原创 2021-10-07 17:37:20 · 1071 阅读 · 0 评论 -
Linux信号
信号是由用户、系统或进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常,Linux中有很多种不同的信号。可以在终端输入kill -l 来查看Linux支持的信号,如下图:Linux信号可由如下条件产生:1、对于前台进程,用户可以通过输入特殊的终端字符来发送,比如输入Ctrl+C通常会给正在运行的进程发送一个中断信号。2、系统异常。比如浮点异常和非法内存段访问。3、系统状态变化。比如alarm定时器到期时将引起SIGALRM信号。4、在终端运行kill命令或在程原创 2021-10-05 15:29:43 · 1273 阅读 · 2 评论 -
IP地址转换函数
Linux IP地址转换函数通常,我们习惯可读性好的字符串来表示IP地址,比如使用点分十进制的字符串表示IPV4地址。但在编程中我们需要先把它转换为整型数据方能使用,而记录日志时则相反,下面介绍的函数可以将这两种形式的地址进行相互转换。#include <arpa/inet.h>// 将点分十进制字符串转换为十进制整数,失败时返回INADDR_NONEin_addr_t inet_addr(const char *strptr);// 同第一个函数功能一样,成功时返回1, 失败时返原创 2021-09-28 12:34:16 · 324 阅读 · 0 评论 -
VS Code自定义用户代码片段(C++)
vs code支持用户自定义代码片段,用起来很方便,下面来介绍一下如何使用用户代码片段1.用户代码片段简单介绍1.1 点击左下角设置1.2 在cpp.json中设置要定义的代码片段`// Example:"Print to console": {"prefix": "log", "body": [ "console.log('$1');", "$2" ], "description": "Log output to console" }`第一行字符串是一个提示信息原创 2020-11-30 14:05:29 · 2926 阅读 · 1 评论 -
mmap共享内存映射
mmap函数void *mmap(void *adrr, size_t length, int prot, int flags, int fd, off_t offset); 返回值: 成功:返回创建的映射区首地址;失败:MAP_FAILED宏参数: addr: 建立映射区的首地址,由Linux内核指定。使用时,直接传递NULL length:欲创建映射区的大小 prot: 映射区权限PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE flag原创 2020-06-11 23:13:47 · 344 阅读 · 0 评论 -
linux学习笔记之 —— 共享库(动态库)
共享库(动态库)的制作:1.命名规则: lib + 名字 +.so 例如: libMytest.so2制作步骤: 1).生成与位置无关的代码 (生成与位置无关的.o) 2).将.o打包成共享库(动态库)具体步骤如下:假如目录下有两个源文件需要生成动态库:add.c sub.c 头文件head.h 在include目录中第一步:生成与位置无关的.o-fPIC 参数即为生...原创 2020-03-09 22:20:23 · 248 阅读 · 0 评论 -
linux学习笔记之 —— 静态库
静态库的制作:1.命名规则: lib + 库的名字 + .a 例如:libMytest.a2.制作步骤 1).生成对应的.o文件 2).将生成的.o文件打包 ar rcs + 静态库的名字(libMytest) + .o文件例如:当前有两个源文件需要生成静态库:分别为add.c sub.c 头文件head.h在include目录中两个文件的内容分别为: 头文件的内...原创 2020-03-09 20:27:21 · 209 阅读 · 0 评论 -
linux学习笔记之 —— vim编辑器
vim编辑器的使用命令行模式下的操作:1).光标的移动 H J K L 前 下 上 后移动到行首: 0移动到行位: $文件开始位置:gg文件末尾: G 或shif + g行跳转: 数字G 例如300G 跳转到300行2).删除操作/剪切操作以下删除操作也为剪切操作删除光标后的字符:x删除光标前的字符:shift + x删除单词:dw (光标移动到单词开始位...原创 2020-03-09 18:41:02 · 224 阅读 · 0 评论 -
linux学习笔记之—— 文件压缩
linux压缩文件命令:1)、.tar --不使用z/j参数 该命令只能对打包文件参数: c --创建 --压缩 x --释放 --解压缩 v --显示提示信息 f --指定压缩文件名字 z --使用gzip的方式压缩文件 -- .gz j --使用bzip2的方式压缩文件 -- .bz2压缩命令: tar ...原创 2020-03-09 18:34:38 · 313 阅读 · 0 评论