<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Besko的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Besko</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Besko]]></copyright><item><title><![CDATA[std::optional和std::variant学习]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/135245744</link><guid>https://blog.youkuaiyun.com/Besko/article/details/135245744</guid><author>Besko</author><pubDate>Wed, 27 Dec 2023 14:45:28 +0800</pubDate><description><![CDATA[C++17引入的一种模板类，主要用来表示一个可以为空的变量。例如，对于二分查找，传统的方式在找不到时通常返回一个特殊值标记，如返回-1表示找不到item。上述方式可能会存在一些问题，因为调用接口的人可能并不会检查函数返回值而直接使用结果，此外不同程序员习惯不同，可能也会使用不同类型的特殊值，从而提高使用成本。使用optional可以方便得处理上述情况，只需将函数接口稍加修改即可。想要处理返回值也很方便optional的另一种常用场景为可空对象作为实参。]]></description><category></category></item><item><title><![CDATA[c++交替打印]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/100161405</link><guid>https://blog.youkuaiyun.com/Besko/article/details/100161405</guid><author>Besko</author><pubDate>Fri, 30 Aug 2019 16:25:40 +0800</pubDate><description><![CDATA[#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;mutex&gt;
#include &lt;condition_variable&gt;
 
std::mutex data_mutex;
std::condition_variable data_var;
bool flag = true;
 
void print...]]></description><category></category></item><item><title><![CDATA[C++ 简单工厂模式]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99960480</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99960480</guid><author>Besko</author><pubDate>Wed, 21 Aug 2019 14:34:22 +0800</pubDate><description><![CDATA[#include &lt;bits/stdc++.h&gt;
#include &lt;conio.h&gt;
using namespace std;

class Operation{
private:
    int num1;
    int num2;
public:
    virtual int cal()=0;   
    int getn1(){
        return...]]></description><category></category></item><item><title><![CDATA[C++单例模式]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99960359</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99960359</guid><author>Besko</author><pubDate>Wed, 21 Aug 2019 14:32:13 +0800</pubDate><description><![CDATA[#include &lt;iostream&gt;
#include &lt;conio.h&gt;
using namespace std;

/*******************************************************************************

//   Mayer's Singleton

class Singleton{
pub...]]></description><category></category></item><item><title><![CDATA[NGINX输出问题解决过程]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99623094</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99623094</guid><author>Besko</author><pubDate>Thu, 15 Aug 2019 10:34:52 +0800</pubDate><description><![CDATA[发现在编译了新写的ngx_http_nc_module时，以前的nginx_hello_module失效了，甚至连nginx的欢迎页面也进不去，打开浏览器的调试工具发现一直处于pending状态，真是让人费解。



经过导师的帮助，通过gdb调试时发现，在nginx的ngx_http_core_module中的ngx_http_core_run_phases函数，调用了如下方法，





...]]></description><category></category></item><item><title><![CDATA[nginx输出问题]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99622952</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99622952</guid><author>Besko</author><pubDate>Thu, 15 Aug 2019 10:20:45 +0800</pubDate><description><![CDATA[尝试使用nginx module来获取连接的socketfd，查看了ngx_http_request_t和ngx_connection_t发现获取fd很简单，假设有个结构体ngx_http_request_t *r，则可以使用r-&gt;connection-&gt;fd得到连接的socketfd。



在自己的ngx_http_nc_module中尝试了一下，handler处理函数如下


...]]></description><category></category></item><item><title><![CDATA[记一次nginx module 调试]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99622675</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99622675</guid><author>Besko</author><pubDate>Thu, 15 Aug 2019 10:11:11 +0800</pubDate><description><![CDATA[参考了https://blog.youkuaiyun.com/xiajun07061225/article/details/9383883



先进入nginx工作目录 /usr/local/nginx/sbin/

使用gdb -q -tui（q选项是以安静模式启动，不显示GDB版本等信息。tui选项可以显示代码界面）



然后在gdb中启动nginx shell ./nginx

启动之后，可以...]]></description><category></category></item><item><title><![CDATA[Socket编程实现简单的C/S交互]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99571478</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99571478</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 15:11:41 +0800</pubDate><description><![CDATA[学习了一下socket编程的基本知识。主要看了下《UNIX网络编程卷1：套接字联网API（第3版）》里面对socket、bind、listen、accept、connect等函数的介绍。然后参考了http://chinaunix.net/uid-28541347-id-4700074.html



原文确实挺不错，对我启发很大，这里直接贴个简单的代码，是通过客户端连接服务器，在服务器中通过fo...]]></description><category></category></item><item><title><![CDATA[Nginx + fastcgi 简单实例]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99549153</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99549153</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 11:21:37 +0800</pubDate><description><![CDATA[参考https://blog.youkuaiyun.com/allenlinrui/article/details/19419721

一、介绍

通用网关接口（Common Gateway Interface/CGI）描述了客户端和服务器程序之间传输数据的一种标准，可以让一个客户端，从网页浏览器向执行在网络服务器上的程序请求数据。CGI 独立于任何语言的，CGI 程序可以用任何脚本语言或者是完全独立编程语言...]]></description><category></category></item><item><title><![CDATA[记一次tls客户端配置]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99548180</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99548180</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 11:08:01 +0800</pubDate><description><![CDATA[参照https://github.com/alfredh/retls

https://github.com/creytiv/re/tree/sip_tls_verify



首先安装需要的libre库

https://github.com/creytiv/re/tree/sip_tls_verify

进去下载之后

Make

Make install

Ldconfig



然后安...]]></description><category></category></item><item><title><![CDATA[open read write]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99545829</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99545829</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 10:37:43 +0800</pubDate><description><![CDATA[Open read write函数

参考https://blog.youkuaiyun.com/ly52352148/article/details/52873819



1.open（）函数

头文件#include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; #include &lt;fcntl.h&gt;



定义函数：

int...]]></description><category></category></item><item><title><![CDATA[fork,execl,dup2]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99545244</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99545244</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 10:28:43 +0800</pubDate><description><![CDATA[Fork execl dup2



实习需要用到上面的几个函数。先通过一个简单的例子来学习一下。



先写一个a.c代码输出hello







附：









在b.c代码中fork一个进程，将a.c的输出重定位到OUTPUT.txt中。





fork（）函数。一个现有进程可以调用fork函数创建一个新进程。 由fork创建的新进程被称为子进程（child ...]]></description><category></category></item><item><title><![CDATA[Nginx module开发 简单实例——filter模块]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99543985</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99543985</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 10:16:06 +0800</pubDate><description><![CDATA[上篇笔记完成了一个简单的handler模块hello_module，本篇笔记将在上篇笔记的基础上增加一个filter模块，目的是将hanlder模块输出内容加粗变颜色。文章参考了http://tengine.taobao.org/book/chapter_04.html



一、filter模块介绍

 过滤（filter）模块是过滤响应头和内容的模块，可以对回复的头和内容进行处...]]></description><category></category></item><item><title><![CDATA[Nginx module开发 简单实例——hello world]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99543481</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99543481</guid><author>Besko</author><pubDate>Wed, 14 Aug 2019 10:01:48 +0800</pubDate><description><![CDATA[以最简单的hello world为例。开发一个handler模块完成

参考http://tengine.taobao.org/book/chapter_03.html



handler模块开发需要完成3步

编写模块基本结构。包括模块的定义，模块上下文结构，模块的配置结构等。
	实现handler的挂载函数。根据模块的需求选择正确的挂载方式。
	编写handler处理函数。模块的功能主要通...]]></description><category></category></item><item><title><![CDATA[Nginx 配置]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99447648</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99447648</guid><author>Besko</author><pubDate>Tue, 13 Aug 2019 16:42:47 +0800</pubDate><description><![CDATA[下载安装包
nginx-1.14.2.tar
http://nginx.org/en/download.html
openssl-1.1.1b.tar.gz
https://ftp.openssl.org/source/old/1.1.1/
1.放到/home/zbr/src目录下解压
Tar –zxvf openssl-1.1.1b.tar.gz
2.进入解压目录后
./config
Make
...]]></description><category></category></item><item><title><![CDATA[一些杂笔记]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/99436147</link><guid>https://blog.youkuaiyun.com/Besko/article/details/99436147</guid><author>Besko</author><pubDate>Tue, 13 Aug 2019 14:56:52 +0800</pubDate><description><![CDATA[http://tengine.taobao.org/book/chapter_04.html nginx模块开发工具书

https://www.kancloud.cn/digest/understandingnginx/202597nginx基础知识

https://blog.youkuaiyun.com/chaoyu168/article/details/49906145 客户端服务端简单认证

htt...]]></description><category></category></item><item><title><![CDATA[旋转数组的最小数字]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/76719065</link><guid>https://blog.youkuaiyun.com/Besko/article/details/76719065</guid><author>Besko</author><pubDate>Sat, 05 Aug 2017 14:57:22 +0800</pubDate><description><![CDATA[把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转，该数组的最小值为1。
思路可以使用二分查找，使用两个指针lo和hi，lo为0，hi为size-1，因为递增数组旋转后的数组可以划分成两个有序的递增数组，所以要找的就是其分界点的位置，当a[lo]>a[hi]]></description><category></category></item><item><title><![CDATA[文章标题]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/76577319</link><guid>https://blog.youkuaiyun.com/Besko/article/details/76577319</guid><author>Besko</author><pubDate>Wed, 02 Aug 2017 14:51:18 +0800</pubDate><description><![CDATA[栈混洗所谓栈混洗就是序列以某一顺序压入，给定另一个序列看其是否是压入序列的一个输出。用三个栈比较容易理解，A是入栈序列，每次只允许从A中push元素到S或者从S中push元素到A 
 
例如序列1，2，3. 3，2，1就可以是它的一个输出序列，而3 1 2 就不会是它的一个输出序列。对于一个长度为n的序列，其满足栈混洗的数目sp（n）≤n!，具体来说，sp(n)=(2n)!/((n+1)!n!)。]]></description><category></category></item><item><title><![CDATA[括号匹配]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/76531603</link><guid>https://blog.youkuaiyun.com/Besko/article/details/76531603</guid><author>Besko</author><pubDate>Tue, 01 Aug 2017 15:15:26 +0800</pubDate><description><![CDATA[遇到左括号入栈，遇到右括号看其与最上方的括号是否匹配，是则出栈，最后看栈是否为空即可
#include
#include
using namespace std;
bool ismatched(string s){
	int l=s.length();
	stack stk;
	if(s[0]==')'||s[0]==']'||s[0]=='}')
		return false;
	for(in]]></description><category></category></item><item><title><![CDATA[字符串翻转]]></title><link>https://blog.youkuaiyun.com/Besko/article/details/75088075</link><guid>https://blog.youkuaiyun.com/Besko/article/details/75088075</guid><author>Besko</author><pubDate>Thu, 13 Jul 2017 17:42:22 +0800</pubDate><description><![CDATA[string reverseString(string s) {
	char c;
    for(int i=0;i<s.length()/2;i++){
    	c=s[s.length()-i-1];
    	s[s.length()-i-1]=s[i];
    	s[i]=c;
	}
	return s;
}
可以使用一个中间变量存储后半段的值，这样只需要对前半段遍历，然后交换即可]]></description><category></category></item></channel></rss>