【Linux】实现守护进程 | 以tcpServer为例
本文将以tcp服务器代码为基本,讲述如何将进程守护进程化,后台运行 1.守护进程所谓守护进程,就是和其他进程没有关系的进程;其独立运行于系统后台,除非自己退出或收到信号终止,否则会一直运行下去 1.1 进程组在我们使用的bash中,同一时刻只会有一个前台进程组 如图,当一个前台进程开始运行之后,我们没有办法在当前终端开启第二个前台进程。 在运行的命令后面加&,临时让当前进程在后台运行。注意,此时tcp虽然在后台运行了, 但对于它而言,stdin/stdout/stderr的文件描述符依旧指向的是当前bash的输入输出,所以它的日志依旧会打印到当前终端上。 用ps命令查看当前进程的 ...
【Linux】popen pclose接口介绍
本篇文章简单讲述了c语言接口popen/pclose的用法 1.函数作用函数定义如下 1234#include <stdio.h>FILE *popen(const char *command, const char *type);int pclose(FILE *stream); popen函数会创建一个管道,fork一个子进程,关闭管道的不使用端,通过exec函数执行一个shell命令,等待命令终止。并将命令的输出结果通过管道返回给当前的进程; 1.1 popenpopen函数会创建一个管道,fork后调用shell来打开进程。由于管道的定义是单向的,第二个参数type ...
【C++】using的三种用法 | 转载
C++ using的三种用法,这个之前还没有接触过 示例12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;class ClassOne {public: int w;protected: int a;};class ClassTwo{public: using ModuleType = ClassOne;};template <typename ClassType>class ClassThre ...
【Linux】来写一个tcp的服务端+客户端
今天让我们来写一个tcp的服务器/客户端代码 完整代码见我的gitee 连接 阅读本文前,建议先阅读👉 udp服务器 1.基本框架tcp的服务器和udp服务器初始化接口是非常相似的,区别就在于要选择字节流进行初始化 但是到运行状态就不同了 tcp是需要连接的 udp不需要连接 所以就会出现分歧:udp可以用sendto和receve来发送/接收信息,服务端只需要监听特定端口收到了什么信息; 但tcp并不能这么做,在通信之前,tcp服务器必须要和客户端建立链接。 举个不恰当的例子,udp服务器好比一个水盆,等待水的注入;而tcp服务器是个水管,必须要两头连通了, ...
【Python】自动解析markdown中的图片并保存
python自动化下载/上传md中图片实在是太方便了 1.起因为什么需要python来下载md里面的图片?原因很简单,那就是需要把图片保存下来,上传到第二个图床(迁移) 对于阿里云OSS来说,有两种迁移办法 使用官方的数据导出功能 使用api接口遍历oss目录下载所有图片 这两种办法都不是那么方便,所以我选择了第三种 解析本地md文件中的img url,下载图片并保存到本地 那要怎么做呢?👇 2.教程我在github找到了这个项目 👉 Deali-Axy/Markdown-Image-Parser 作者的代码写的很棒,但是README里面却少了一个重要的启动 ...
【Docker】配置wiki js
wikijs是一个在线多人协作(带git版本管理)的wiki套件 相比于其他wiki的展示功能为主,wikijs将权限管理+多人协作作为了首个要素,其支持富文本编辑器/mardown编辑器/html源码编辑 1.Docker-cli部署 在云服务器安装 https://docs.requarks.io/install/ubuntu 可以跟着官方的指令走,下面节选了最终3个创建容器的命令。 配置密钥 12345678910mkdir -p /etc/wiki## Generate DB secretopenssl rand -base64 32 > /etc/wi ...
【C语言】可变参数列表
本篇博客让我们来认识一下C语言学习过程中往往被忽略的可变参数列表 所谓可变参数,就是一个不限定参数数量的函数,我们可以往里面传入任意个数的参数,以达成某些目的。 关联:C++11可变模板参数 1.函数123456#include <stdarg.h>void va_start(va_list ap, last);type va_arg(va_list ap, type);void va_end(va_list ap);void va_copy(va_list dest, va_list src); 1.1 va_start1void va_start(va_list ap, ...
【Linux】来写一个udp的服务端+客户端
来写一个udp的代码 1.socket编程接口123456789101112131415161718#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器) int bind(int socket ...
【Linux】man什么都搜不了,No manual entry for xxx的解决方案
man什么都搜不了,No manual entry for xxx的解决方案 系统 CentOS 7.6 1.问题描述今天查手册的时候,发现man什么都查不了。不管是系统接口还是函数,都显示没有入口文档(No manual entry for) 12345678[muxue@bt-7274:~/git]$ man pthread_createNo manual entry for pthread_create[muxue@bt-7274:~/git]$ man bindNo manual entry for bind[muxue@bt-7274:~/git]$ man manNo ma ...
【Linux】CentOS7.6 升级 gcc/g++
CentOS 7.6 升级 gcc/g++的方法,不一定适用于其他linux系统 1.查看版本12g++ -vgcc -v 当前查看版本,发现是4.8.5,这已经是2015年的旧版本了,对c++11的支持不是很完善,为了方便学习和编写新版本的代码,升级一下还是可以的 如果你的系统上没有gcc/g++,则尝试用下面的方法安装 1yum install -y gcc gcc-c++ 示例 123456789101112[root@bt-7274:~]# yum install -y gcc gcc-c++Loaded plugins: fastestmirror, la ...