随笔分类 -  后台开发指南

摘要:我们知道一个程序可以包含多个进程,每个进程中可以创建多个线程,在线程中又可以创建成千上万甚至更多个协程。进程和线程的创建以及调度需要在内核态和用户态之间切换;而协程的创建和调度都在用户态,不需要和内核态进行交互。所以这就注定创建和维持协程运行所牺牲的性能,要远小于进程和线程。另外,协程都是以一组的形 阅读全文
posted @ 2020-04-09 15:17 酱油和醋 阅读(617) 评论(0) 推荐(0) 编辑
摘要:信号是一种软件中断。常驻程序尤其需要注意处理这些信号,如果没有处理,同时也没有了解信号的默认动作,进程可能会莫名其妙的退出或者core。信号早已有之,但在老的操作系统中,可能会出现信号丢失。4.3BSD和SVR3之后增加了可靠信号机制,我们可以放心使用信号机制。本文根据阅读Nginx代码,参考其信号处理机制,结合自己编码中的经验,总结了信号使用方法和注意事项。 #define SIGHUP 1... 阅读全文
posted @ 2019-06-25 10:52 酱油和醋 阅读(262) 评论(0) 推荐(0) 编辑
摘要:头文件/usr/include/asm-generic/errno-base.h定义错误码: #ifndef _ASM_GENERIC_ERRNO_BASE_H#define _ASM_GENERIC_ERRNO_BASE_H#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or ... 阅读全文
posted @ 2019-05-09 15:56 酱油和醋 阅读(390) 评论(0) 推荐(0) 编辑
摘要:相比于静态链接库,Linux上的动态链接库和可执行程序是同一种格式,都是ELF格式。原理上动态库也能和可执行程序一样直接运行。 比如,可以直接运行“/lib64/ld-linux-x86-64.so.2”,还有“/lib/x86_64-linux-gnu/libpthread.so.0”, 还有“/lib/x86_64-linux-gnu/libc.so.6”等等。举个例子,libc.so.6... 阅读全文
posted @ 2018-09-14 09:12 酱油和醋 阅读(1553) 评论(1) 推荐(1) 编辑
摘要:connect是socket套接口编程中非常重要的一个函数,它用于客户机连接使用TCP协议打开的服务机。 在实际项目中,connect有同步连接和异步连接两种模式。 同步连接指的是,我们设置socket套接字为阻塞模式,调用connect之后,程序一直等待,直到该函数返回成功或者失败。如果连接过程中,发生了超时重传,接口的耗时时间有可能达127秒之久。假如我们的服务器程序只有一个网络线程,同步... 阅读全文
posted @ 2018-09-13 10:50 酱油和醋 阅读(3098) 评论(0) 推荐(0) 编辑
摘要:有些工程项目中,会发现一些.s(小写)或者.S(S大写)的汇编文件。发现他们还是有细微的差别: .s 汇编语言源程序;后续编译操作:汇编 .S 汇编语言源程序;后续编译操作:预处理,汇编 我们知道对于一个源代码文件,编译有4个步骤: 预处理(Pre-Processing)-->编译(Compiling)-->汇编(Assembling)-->链接(Linking) ... 阅读全文
posted @ 2018-04-07 19:56 酱油和醋 阅读(1294) 评论(0) 推荐(0) 编辑
摘要:typedef unsigned short int sa_family_t;#define __SOCKADDR_COMMON(sa_prefix) sa_family_t sa_prefix##family#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))/* Structure describing a gener... 阅读全文
posted @ 2018-03-11 12:46 酱油和醋 阅读(205) 评论(0) 推荐(0) 编辑
摘要:在Linux先编译软件基本都是采用configure文件生成makefile,或者,cmake生成makefile文件两种方式。它们生成的makefile文件,一般默认不支持-g调试选项。但我们使用这种方式编译出来的静态库时,如果程序运行中core在静态库中,我们看不到有用的相关信息。所以有必要编译出debug版本。针对configure文件而言: 第一种方法:./configure -h, 我们... 阅读全文
posted @ 2018-03-04 17:02 酱油和醋 阅读(2551) 评论(0) 推荐(0) 编辑
摘要:时间函数之间的关系 struct tm{ int tm_sec; // 代表目前秒数,正常范围0-59,但允许至61秒; int tm_min; // 代表目前分数,范围为0-59。 int tm_hour; // 从午夜算起的小时数,范围为0-23。 int tm_mday; // 目前月份的日数,范围为1-31。 int tm_m... 阅读全文
posted @ 2018-01-09 13:07 酱油和醋 阅读(3579) 评论(0) 推荐(0) 编辑
摘要:glibc是标准C库的GNU实现。我们采用C/C++所写的程序,运行时基本都依赖与它。如果我们想看当前机器glibc的源代码,首先需要知道当前机器glibc的版本号,然后到glibc的官网下载对应版本的源代码。查看当前机器glibc的版本号第一种方法:使用命令ldd,查看可执行程序依赖libc的路径。由上可知,系统采用的是libc-2.19.so的动态库,那么glibc的版本号是2.19。第二种方... 阅读全文
posted @ 2015-05-03 14:18 酱油和醋 阅读(21672) 评论(0) 推荐(0) 编辑
摘要:昨天看一篇关于libco的博文,里面提到了一个由于全静态链接导致的bug。全静态链接?以前没有接触过这个概念,特意到网上搜了下,原来是一个程序将其依赖的所有动态库都替换成对应静态库,即使是libc.so,libm.so,libstdc++.so这种系统级别的动态库。全静态链接出来的可执行程序,不依赖 阅读全文
posted @ 2015-05-01 20:15 酱油和醋 阅读(3427) 评论(0) 推荐(0) 编辑
摘要:1 -- 简易日志库 平时会写些小的程序,需要打日志,但又不想整个大的日志库,所以自己就写个简单点的,需要的时候就直接下载使用即可。 //将该文件保存为console.hpp #ifndef __CONSOLE_HPP__ #define __CONSOLE_HPP__ #include <stdi 阅读全文
posted @ 2013-01-19 11:54 酱油和醋 阅读(473) 评论(0) 推荐(0) 编辑
摘要:背景当前的工作与SVN有关,今天使用SVN库编写了一个小程序,编译代码时发现编译器告警:“warning: 'svn_client_ls2' is deprecated (declared at”。svn@linux-rwdx:~/objs/motadou> makeg++ webdav.cpp -o webdav -I/home/svn/apps/svn/include/subversion-1... 阅读全文
posted @ 2012-06-27 16:45 酱油和醋 阅读(641) 评论(0) 推荐(0) 编辑
摘要:服务器存放数据的先后顺序,大端法、小端法,还有在网络编程中经常遇到的网络字节序。 阅读全文
posted @ 2009-01-18 05:12 酱油和醋 阅读(4018) 评论(3) 推荐(2) 编辑