![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 54
半夏云流
山有扶苏,隰有荷华。
展开
-
C语言字符串替换函数strrpl
// 参数说明: // in, 源字符串 // out, 存放最后结果的字符串 // outlen,out最大的大小 // src,要替换的字符串 // dst,替换成什么字符串 char *strrpl(char *in, char *out, int outlen, const char *src, char *dst) { char *p = in; unsigned int len = outlen - 1; // 这几段检查.原创 2021-10-14 16:02:08 · 1227 阅读 · 0 评论 -
字符串替换strrpl与字符串转大写strupr
strlwr()和strupr()不是标准库函数,只能在windows下(VC、MinGW等)使用,Linux GCC中需要自己定义。strupr()用于将字符串中的字符转换为小写,其原型为:char *strupr(char *str);【参数说明】str为要转换的字符串。【返回值】返回转换后的大写写字符串,其实就是将str返回。也就是说,strupr() 不会创建一个新字符串返回,而是改变原有字符串。所以strupr()只能操作字符数组,而不能操作指针字符串,因为指针指向的字原创 2021-09-02 18:01:43 · 515 阅读 · 0 评论 -
双向链表实现(C语言)
1. 概念百度百科:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。...原创 2021-06-17 21:58:24 · 1756 阅读 · 3 评论 -
单向链表实现(C语言)
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。...原创 2021-06-11 12:01:18 · 1417 阅读 · 0 评论 -
封装一个可变参数打印函数
在开发中,经常会用到打印,而这些打印在程序运行阶段不需要,仅在调试或开启现象的时候需要,我们用printf来打印往往不能对其进行灵活的控制,这个时候,我们就可以自己封装一个与printf功能相同的打印函数,加一些调试开关,就可以。用到的接口:#include <stdarg.h> int vprintf(const char *format, va_list...原创 2018-09-06 16:11:11 · 1867 阅读 · 0 评论 -
标准数据类型宏定义使用
对于一些标准的数据类型,例如unsigned int, unsigned short, unsigned long 等,我们可以将其重命名成为简易拼写的字母,这样在使用的时候,既减少了拼写,又显得清楚明了,下面是我常用的头文件的定义:my_basetype.h#ifndef _BASETYPE_H_#define _BASETYPE_H_/*********************...原创 2018-09-05 22:34:19 · 2942 阅读 · 0 评论 -
掌握几个小技巧,提升编码效率
C语言本身的性能几乎是所有语言中最高的,当然,这要除去机器语言(二进制?)和汇编语言。使用C语言开发,本身已经可以获得极高的程序执行效率,但是,不同程序执行得到相同的结果,同一种语言不同方式的编码效率也不尽相同。使用C语言开发可能开发的效率并不如一些本身封装好很多库的语言开发效率高,例如java,python,但是C语言同样可以将一些常用数据结构封装成常用接口,以此来实现相关的库函数功能,当然这是...原创 2018-09-05 12:22:23 · 2742 阅读 · 0 评论 -
Epoll 服务器的一种通用框架,epoll_data_t 的使用
一、前言前面已经介绍过一个原始结构epoll服务器的使用,原文请点击查看:epoll原始结构服务器现在,我将在原epoll服务器的基础上对epoll的用法进行改进,进一步简化epoll服务器的编码方式,这种框架在大型项目中十分高效,正所谓框架搭的好,往里面填“dog shit”都不会有问题。这当中,我们需要用到一个简单的消息封装结构,这在通信中十分常见,类似于一种伪协议,只有内部通用。...原创 2018-08-19 17:37:50 · 2732 阅读 · 5 评论 -
linux主机序与网络序的转换
在网络通信中,经常用到字节序转换,实际上内核已经帮我们实现了两套通用的转序宏定义,但是在转换过程中,都是进行主继续与网络序的转换,代码难免冗余,我们可以根据已经提供的特性,来添加一些执行规则,这样就可以用一个转序函数实现两种转序,例如,htonl,既可以实现原htonl的功能,也实现了ntohl的功能,不用写两套转换函数,只需要将转序函数重新定义一个名字就可以。定义如下,未实测。实现的规则就是...原创 2018-08-18 20:56:35 · 1631 阅读 · 0 评论 -
linux获取时间,精确到微秒usec
包含系统头文件:#include <sys/time.h>用到的接口:int gettimeofday(struct timeval *tv, struct timezone *tz);计算时间间隔,精确到微秒:1.首先获取任务起始时间值,使用上述接口,也可以封装,并记录到微秒2.中途执行其他任务3.再次获取任务结束时间值,使用上述接口,也可以简单封装4....原创 2018-08-18 20:21:48 · 5653 阅读 · 0 评论 -
快速排序及多线程快排优化 & 选择 & 归并排序
一、写在前面1.回调函数:用到函数指针,即指向函数的指针,这在代码框架结构设计中十分简洁高效,看代码typedef enum tagSORT_FUNC{ SELECT_SORT= 0, MERGE_SORT, QUICK_SORT, SORT_FUNC_MAX}SORT_FUNC_E;typedef void (*SORT_CALLBACK_PF...原创 2018-08-18 20:11:49 · 1643 阅读 · 0 评论 -
Epoll学习服务器的简单实现-Linux内核原始Epoll结构
1.Begins~学习linux编程很久,只知道网络编程是socket,bind, listen。。。,然而这些都是网络通信软件最基本的接口。在某网络公司待了y,也了解到公司的基础就是网络转发 ,然而网络转发实现并非我们平时所见的简单的send,recv。公司设备的转发都是建立在稳定并且高效的内部业务的基础上的,例如一个可靠性的服务:BFD(链路双向快速检测),进程内业务就是建立在内核与用户态...原创 2018-07-29 15:51:34 · 602 阅读 · 0 评论 -
创建HASH的一个模板,以Linux内核hash_list为例
百度百科:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(k...原创 2018-08-01 22:11:43 · 749 阅读 · 0 评论