一、时间堆概述前文几篇文章介绍的定时方案都是以固定的频率调用心搏函数tick,并在其中依次检测到期的时间器,然后指定到期定时器上的回调函数文本设计定时器的另一种思路:1.将所有定时器中超时时间最小的一个定时器的超时值作为心搏间隔。这样,一旦心搏函数tick被调用,超时时间最小的定时器必然到期,我们就可以在tick函数中处理该定时器2.然后再次从剩余的定时器中找出超时时间最小的一个,并将这段最小
select系统调用,参见文章:https://blog.csdn.net/qq_41453285/article/details/89607091 poll系统调用,参见文章:https://blog.csdn.net/qq_41453285/article/details/89672980
一、时间轮概述前面的文章(https://blog.csdn.net/qq_41453285/article/details/103719025)我们设计了一个基于排序链表的定时器存在一个问题:那就是添加定时器的效率偏低 本文我们介绍一种高性能定时器——时间轮时间轮结构分析此处的时间轮属于简单的时间轮,复杂的时间轮可能有多个轮子,不同的轮子可能拥有不同的粒度。相邻的两个轮子,精度高的...
Linux提供了三种定时方法,它们是: socket选项SO_RCVTIMEO和SO_SNDTIMEO:https://blog.csdn.net/qq_41453285/article/details/103697673 SIGALRM信号,参见文章:本文要介绍的 I/O复用系统调用的超时参数,参见文章:https://blog.csdn.net/qq_41453285/article...
Linux提供了三种定时方法,它们是: socket选项SO_RCVTIMEO和SO_SNDTIMEO:本文要介绍的 SIGALRM信号,参见文章:
待续
一、统一信号处理事件源概述信号是一种异步事件:信号处理函数和程序的主循环是两条不同的执行路线。显然,信号处理函数需要尽可能快地执行完毕,以确保该信号不被屏蔽(为了避免一些竞态条件,信号在处理期间,系统不会再次触发它)太久 一种典型的解决办法是: 把信号的主要处理逻辑放到程序
非阻塞connect详情介绍可以参见文章:https://blog.csdn.net/qq_41453285/article/details/89890429一、非阻塞connect概述man手册connect的man手册有如
select、poll、epoll三组I/O复用系统调用: 都能同时监听多个文件描述符 它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值就是就绪的文件描述符的数量。返回0表示没有事件发生 3个IO复用介绍分别见: select详情见文章:
一、错误在编译带有MySQL接口的C语言程序时,如果出现如下错误二、错误原因及解决办法错误原因①编译时,.c头文件已经添加了#include <mysql.h>,但是gcc没有提供-I和-L选项解决办法gcc添加-I和-L编译选项分别提供include路径和库文件路径gcc -I/usr/include/mysql demo.c -L/usr/lib/my...
前言默认情况下,MySQL是不允许让自己所在局域网的其它网络所连接的,因此我们需要设置一些方法,让MySQL可以让其他网络访问 本文介绍在Windows下连接Ubuntu的MySQL,另外Ubuntu去连接Windows的数据库也是原理相同的第一步:默认情况下,我们在Linux下开启MySQL,使用Windows的工具去连接,都会显示错误。例如下面用Windows下的Navicat去连...
select的基本用法见文章:https://blog.csdn.net/qq_41453285/article/details/89336199一、项目目的本篇文章介绍使用select来接收普通数据与带外数据,其中: 普通数据我们放在fd_set集合的可读集合中
一、epoll的LT模式、ET模式介绍见文章:https://blog.csdn.net/qq_41453285/article/details/89343074二、编码实现下面我们通过epoll来分别实现对LT和ET不同模式下对数据是如何处理的 如果我们的服务端监听套接字设置为EPOLLET模式工作,那么当服务端接收到客户端的请求(读写数据等)之后,可能会将这个就绪事件不立即进行处...
一、带外数据有些传输层协议具有带外(Out Of Band,OOB)数据的概念,用于迅速通告对方本端发生的重要事件。因此,带外数据比普通数据(也称为带内数据)有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据。带外数据的传输可以使用一条独立的传输层连接,
一、获取用户ID/组ID#include <unistd.h>uid_t getuid(void); //返回:调用进程的实际用户IDuid_t geteuid(void); //返回:调用进程的有效用户IDuid_t
套接字选项详细介绍,见文章:https://blog.csdn.net/qq_41453285/article/details/89536443一、选项简单介绍当使用setsockopt来设置TCP的接收缓冲区和发送缓冲区的大小时,系统都会将其值加倍,并且不得小于某个最小值。TCP接收缓冲区的最小值是256字节(不同系统会有不同的值),而发送缓冲区的最小值
一、epoll的EPOLLONESHOT事件处理见文章:https://blog.csdn.net/qq_41453285/article/details/89343074二、编码实现#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <unistd.h>...
dup函数介绍,见文章:https://blog.csdn.net/qq_41453285/article/details/102987052程序设计下面利用dup函数实现了基本的CGI服务器//dup.c#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#...
格林尼治时间所有的UNIX系统都使用同一个时间和日期的起点:格林尼治时间(GMT)1970年1月1 日午夜(0点)。这是“UNIX纪元的起点”,Linux也不例外。Linux系统中所有的时间都以从那时起经过的秒数来衡量时间转换关系TZ环境变量在上图中,虚线表示的3个函数(localtime、mktime、strftime)受到环
一、程序参数当一个用C语言编写的Linux或UNIX程序运行时,它是从main函数开始的。对这些程序而言,main函数的声明如下所示: argc:程序参数个数 argv:一个代表参数自身的字符串数组,argv[0]必为程序名,argv[1]开始才是程序的参数 int main(int argc,char *argv[])你可能也会看到Linux的C程序将main函
一、C语言访问MySQL的前提①安装了MySQL服务端见文章:https://blog.csdn.net/qq_41453285/article/details/102638547②安装MySQL库使用C语言访问MySQL之前需要安装MySQL库,输入以下命令安装:#环
readv、writev函数的用法见文章:https://blog.csdn.net/qq_41453285/article/details/89354096程序设计HTTP响应报文通常包含1个状态行、多个头部字段、1个空行和文档。其中,前3部分的内容可能被Web服务器放置在一个内存中,而文档的内容则通常被读入到另一块单独的内存中(通过read或者mmap函数),
目的需求在目录下有一系列的.c文件,我们需要用这些.c文件进行链接,然后生成一个名为“helloworld” 针对需要生成的目标文件,我们会一步一步的对Makefile进行设计,最终形成一个通用型的Makefile一、Makefile-1设计helloworld:cerrexit.o connectsock.o connectTCP.o connectUDP.o dcon.o d...
一、sprintf、snprintf#include <stdio.h>int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const char *format, ...);sprintf功能:发送格式化输出到str所指向的字符串 返回值:成功...
一、设计线程池的优点、作用 线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源 线程的创建需要开辟虚拟机栈,本地方法栈、程序计数器等线程私有的内存空间 在线程的销毁时需要回收这些系统资源。频繁的创建和销毁线程会浪费大量的系统资源,增加并发编程的风险
一、格式#define _GNU_SOURCE /* See feature_test_macros(7) */#include <unistd.h>#include <sys/syscall.h> /* For SYS_xxx definitions */int syscall(int number, ...);二、功能与特点sys...
一、函数原型#include <stddef.h>size_t offsetof(type, member);参数:type:某种类型(结构体等) member:type类型结构中某一成员返回值:返回给定类型中给定成员的偏移量,以字节为单位二、注意事项这个宏很有用,因为组成结构的字段的大小在不同的实现中可能不同,编译器可能插入不同的数字。字段之间的填充...
一、概念二、使用
#include <unistd.h>long sysconf(int name);long fpathconf(int fd, int name);long pathconf(char *path, int name);与文件或目录无关的运行时选项,一般使用sysconf 与文件或目录有关的运行时选项,一般使用fpathconf、pathconf一、返回值如果选...
一、函数#include <unistd.h>long sysconf(int name);long fpathconf(int fd, int name);long pathconf(char *path, int name);与文件或目录无关的运行时限制:一
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号