MENU

makefile文件编写技巧

前言

之前用C++写的都是一些小小几个文件,所以直接使用gcc/g++直接编译文件。但是最近做一个webserver项目,涉及到头文件且多个文件存在有依赖关系,因此使用makefile编译变得更方便。
编译过程为:源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。也即编译+链接过程。

makefile

makefile编写按照如下格式

target ... : requisites ...  目标 : 依赖
    command                     命令(注意命令必须要以Tab键开始)

大致执行过程:①先在目录中找到makefile或Makefile文件 ②在makefile文件中找到第一个目标target做为最终生成目标文件 ③判断最终目标文件是否存在,不存在最终目标文件或者.o的依赖文件更新时间比最终目标文件新,则重新执行编译生成最终目标文件

阅读全文

docker无视防火墙问题总结

前言

之前一直使用docker来部署项目,不过发现直接使用-p映射端口则出现问题,如nginx映射80端,一般都会写-p 80:80,这样导致直接透过系统本机的防火墙,不用开端口可以直接外网访问80端。之前一直使用阿里云、腾讯云机器,可以给ECS实例设置安全组方式限制外网端口,不过针对没有这种设置操作的服务器实例之前一直没有认真研究,现在做一下这次折腾总结记录。

解决方法

  • 使用host网络,docker默认是使用bridge桥接网络方式。
  • 使用expose方式暴露端口在本机,然后采用nginx、haproxy等代理工具做一次转发
  • 映射端口改用-p 127.0.0.1:8080:8080,后在本机nginx代理工具映射公网访问服务
  • 禁用docker的iptables规则(下面详细介绍该方法)

阅读全文

Linux下C++文件判断方式

前言

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

详细说明

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

阅读全文

字节序的理解

前言

最近一直在看《深入理解计算机系统》补充基础知识,看到有关介绍大端小端的介绍,下面就做个总结。

详细

  • 大端:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。(符合我们平时的读写字符数值)
  • 小端:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

举例:如数组0x2356,高位为:0x23 低位为:0x56,在内存的存放如下。

内存地址 小端模式 大端模式
0x5000 0x56 0x23
0x5001 0x23 0x56

阅读全文

I/O多路复用之select、poll、epoll

I/O多路复用可以在单线程的情况下,同时监听多个描述符fd,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
但是select、poll、epoll本质上都是同步I/O,因为它们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,相对于异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

阅读全文