MENU

标签 摸爬滚打 C++ 之路 下的文章

FastCGI协议

前言

最近采用C++开发一个webserver,功能类似于nginx。支持其中的多站点host、反向代理、负载均衡、支持cgi、支持session、cookie。支持FastCGI,类似nginx可以监听9000端口连接php-fpm,因此查资料找相关FastCGI协议相关。

CGI及FastCGI相关知识点

  • CGI(common gateway interface)通常翻译为共同网关接口:是Web Server与后台编程语言交互的一种协议。但是CGI有一个致命的缺点,就是每处理一个请求度需要fork一个进程,不断地fork是一项很消耗时间和资源的工作,这样低效的方式明显不能满足需求。
  • FastCGI是一个常驻型的CGI,可以一直执行,只要激活后,不会每次都花时间去fork一次,而且还支持分布式运算。

学习过PHP的童鞋都知道在PHP有个叫php-fpm,它是FastCGI在PHP中的一种实现。我们常常在nginx中配置fastpass 127.0.0.1:9000,其实nginx将动态语言交由PHP处理。

阅读全文

GCC4.8使用regex坑

背景

最近在写C++的webserver,其中的有一块需要用到正则表达式,而系统centos7自带的GCC编译器的版本gcc 版本 4.8.5,在make编译时候出现std::regex_error::regex_error,一开始怀疑正则问题,使用网页版的正则表达式工具review确实是正确的,后面有在思考是否为编译器版本问题,强大的搜索引擎告诉我确实为版本的原因,regex标准库需要GCC大于等于4.9版本。

阅读全文

sizeof知识点

前言

最近在学习C++知识,记录下一些常考的知识点。

sizeof空类

sizeof空类为1,是为了确保两个不同对象的地址的不同。

#include<iostream>

using namespace std;

class Empty{};

int main(){
    # 输出为1
    cout << sizeof(Empty) << endl;
    return 0;
}

sizeof虚函数

不管包含有多少个虚函数,只有一个虚指针vptr的大小。

#include<iostream>

using namespace std;

class VirtualFunction{
    virtual void funtion1();
    virtual void funtion2();
    virtual void funtion3();
};

int main(){
    # 输出为8
    cout << sizeof(VirtualFunction) << endl;
    return 0;
}

C++之函数指针&指针函数

指针函数

  • 指针函数:返回值是指针的函数。
# 形式如下
类型名 *函数名(函数参数列表)

# 示例代码
// 由于“*”的优先级低于“()”的优先级,因而swap首先和后面的“()”结合,也就意味着,swap是一个函数 char *swap(char *a, char *b) 等价于 char *(swap(char *a, char *b)) 
// 返回值是一个指针地址。

#include <stdio.h>
char *swap(char *a, char *b){
    b = a;
    return b;
}

int main(int argc, char *argv[]) {
    char a[10] = "hello";
    char b[10] = "world";
    printf("%s", swap(a, b));
    return 0;
}

阅读全文

Linux下C++文件判断方式

前言

开发webserver中涉及到其中的读取文件,做一个静态webserver常常需要都文件,比如HTML文件、CSS文件、图片资源等。竟然用过就当在记录整理一下。

详细说明

主要涉及到stat()函数、struct stat结构体、S_ISDIR宏及S_ISREG宏。

阅读全文