
C/C++
文章平均质量分 68
AnSwEr不是答案
Github:https://github.com/AnSwErYWJ
技术博客:www.answerywj.com
展开
-
inline使用注意事项
文章目录GCC在不优化时不会内联任何函数,除非指定函数的“always_inline”属性。先附上结论:GCC在不优化时不会内联任何函数,除非指定函数的“always_inline”属性。测试代码:#include <stdio.h>inline void say(void) { printf("Hello, World\n");}int main(void) { say(); return 0;}使用-O3优化选项,一切正常:$ gcc原创 2021-07-28 14:49:23 · 470 阅读 · 1 评论 -
getrusage-进程资源统计函数
文章目录简介函数说明原型参数返回值属性示例getrusage用于统计系统资源使用情况,即进程执行直到调用该函数时的资源使用情况,如果在不同的时间调用该函数,会得到不同的结果。简介getrusage用于统计系统资源使用情况,即进程执行直到调用该函数时的资源使用情况,如果在不同的时间调用该函数,会得到不同的结果。目前在Linux和macOS支持该函数。函数说明原型#include <sys/time.h>#include <sys/resource.h>int原创 2021-06-23 15:59:48 · 2212 阅读 · 0 评论 -
UNIX网络编程-listen函数及其包裹函数介绍
UNIX网络编程-listen函数及其包裹函数介绍函数简介#include<sys/socket.h>int listen(int sockfd,int backlog); 返回:若成功则为0,若出错则为-1目前listen函数仅为TCP服务器调用,主要完成两个任务: 1. 将socket函数创建的还未建立连接的主动套接字转换为被动(原创 2017-03-23 16:56:34 · 992 阅读 · 0 评论 -
TCP服务器listen函数的包裹函数
TCP服务器listen函数的包裹函数前言:本文将介绍listen函数的包裹函数。listen()函数#include<sys/socket.h>int listen(int sockfd,int backlog)//成功返回0,失败返回-1当TCP服务器调用listen函数时,它做两件事:把服务器套接字从CLOSED状态转换到LISTEN状态。backlog参数规定了内核中未完成连接套接字的原创 2015-09-25 11:33:54 · 1551 阅读 · 0 评论 -
UNIX安全读写函数——readn和writen
UNIX安全读写函数——readn和writen前言:字节流套接字(TCP套接字)上的read和write函数所表现的行为不同于通常的文件I/O。字节流套接字调用read或write输入或输出的字节数可能比请求的数量少,然而这并不是出错的状态。这是因为内核中用于套接字的缓冲区可能达到了极限。通常这种情况出现在一次读多于4096个字节或write在非阻塞情况下返回不足字节数。为了不多次调用read或防原创 2015-09-25 11:13:49 · 3486 阅读 · 1 评论 -
Linux下Socket编程----connect()函数的包裹函数介绍
Linux下Socket编程—-connect()函数的包裹函数介绍这里主要介绍的是在TCP连接中的应用connect()函数简介1. 功能: 用于客户端建立tcp连接,发起三次握手过程。 2. 原型:#include<sys/socket.h>#include<sys/types.h>int connect(int sockfd, const struct sockaddr* server_原创 2015-08-14 13:25:24 · 6422 阅读 · 0 评论 -
Linux socket编程的心跳机制总结
Linux socket编程的心跳机制总结我写这篇文章的目的是想总结一下心跳机制的使用,因为最近两个项目的TCP通信中都使用了这个方法,感觉用法好诗比较经典的,所以拿出来与大家共享。什么是心跳机制心跳机制就是当客户端与服务端建立连接后,每隔几分钟发送一个固定消息给服务端,服务端收到后回复一个固定消息给客户端,如果服务端几分钟内没有收到客户端消息,则视客户端断开。发送方可以是客户端和服务端,看具体需求原创 2015-08-13 21:19:34 · 7418 阅读 · 0 评论 -
C代码覆盖率测试工具Gcov
文章目录介绍简介基本概念基本块BB跳转ARC程序流图原理使用编译数据收集报告生成注意事项图形化展示列表形式XML文件形式HTML文件形式其它ReferenceAbout me代码覆盖率测试反映了测试的广度与深度,量化了测试和开发质量,是十分有必要的,业界目前有针对各种语言的覆盖率测试工具,本文主要介绍C/C++相关的覆盖率测试工具Gcov介绍简介Gcov是一个测试覆盖程序,是集成在GCC中的,随GCC一起发布基本概念基本块BB基本块指一段程序的第一条语句被执行过一次后,这段程序中的每一跳语句原创 2020-05-17 16:33:52 · 1312 阅读 · 0 评论 -
深究strtok系列函数
文章目录函数说明说明参数返回值示例使用注意事项不会生成新的字符串,只是在源字符串上做了修改,源字符串会发生变化第一个参数不可为字符串常量若在第一次提取子串后,继续对源字符串进行提取,应在其后的调用中将第一个参数置为空值`NULL`第二个参数是分割符的集合,支持多个分割符若首字符为分割符,则会被忽略`strtok`为不可重入函数,使用`strtok_r`更灵活和安全源码Reference本文通过分析源码,深究GLIBC中strtok和strtok_r函数的实现原理和使用过程中的注意事项。函数说明#i原创 2020-05-17 16:28:55 · 351 阅读 · 0 评论 -
C语言生成随机数
C语言生成随机数rand函数函数介绍rand()函数是产生随机数的一个随机函数:#includeint rand(void);返回值: rand()返回值为一随机数值,范围在0至RAND_MAX 间(RAND_MAX定义在stdlib.h,其值为2147483647)。 注:在调用此函数前,必须先利用srand()设好随机数种子。如果未设随机数种子,rand()在原创 2015-10-24 21:10:40 · 51155 阅读 · 1 评论 -
Linux下C程序的反汇编
Linux下C程序的反汇编前言:本文主要介绍几种反汇编的方法。gccgcc的完整编译过程大致为:预处理->编译->汇编->链接前三个步骤分别对应了-E、-S、-c三个选项。今天我要介绍的第一种方法就是使用-S这个选项。源程序main.c:/************************************************************************* > F原创 2015-12-08 21:07:22 · 36296 阅读 · 8 评论 -
可变参数(C语言):stdarg.h
可变参数(C语言):stdarg.h前言:本文将介绍C语言函数的可变参数使用,头文件stdarg.h为函数提供了类似的能力,最后会附上一个完整例程来帮助大家理解。详解头文件stdarg.h为函数提供了使用可变参数的能力,但是必须按照指定的步骤进行。1.在函数原型中使用省略号使用可变参数的函数必须要有一个参量列表,参量列表中至少有一个后跟省略号的参量:int fun(int n, ...);n表示省略原创 2015-12-10 22:31:01 · 1076 阅读 · 1 评论 -
Linux下C调用静态库和动态库
Linux下C调用静态库和动态库本文主要介绍Linux下C调用静态库和动态库,使用的样例文件请点击这里. 样例文件welcome.c:#include<stdio.h>#include"welcome.h"void welcome(){ printf("welcome to my code world!\n");} 这是一个样例程序,打印一句话.welcome.h:#ifnde原创 2016-11-23 16:29:04 · 10028 阅读 · 0 评论 -
从文件流中读写整数--C语言
本文将介绍在文本流中,读写整数的两个接口– int getw(FILE *fp)和int putw(int w, FILE *fp),并且与你分享改进后的更实用的接口– unsigned int get_uint(FILE *fp)和unsigned int put_uint(unsigned int i,FILE *fp).从文件流中读写整数–C语言我们都知道,数据在计算机内存中都是以二进制的形式原创 2016-12-07 10:29:59 · 10551 阅读 · 0 评论 -
C程序判断你主机的数据存储方式(大端和小端)
本文将使用C语言编写一个可以判断你主机数据存储方式(大端和小端)的程序.C程序判断你主机的数据存储方式(大端和小端)大端和小端字节序计算机硬件存储数据的方式有两种: 大端字节序(big endian) 和 小端字节序(little endian),两者的区别可以简单理解为: - 大端: 数据高位字节放在内存低地址(人类读写的习惯). - 小端: 数据高位字节放在内存高地址.如现在有数 0x123原创 2016-12-07 15:54:18 · 1154 阅读 · 0 评论 -
WAVE音频文件格式分析--实现C语言读写文件头
本文将详细分析WAVE音频文件的格式,并通过C语言对wave文件头进行读写操作。WAVE音频文件格式分析–实现C语言读写文件头WAVE音频文件WAVE文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准, 它采用RIFF(Resource Interchange File Format,资源交换文件标准)文件格式结构文件的扩展名为“WAV”, 所有的WAV都有一个文件头, 数据本身的格式为P原创 2017-01-09 18:35:00 · 4241 阅读 · 2 评论 -
线程同步机制条件变量的使用与思考
条件变量是Linux线程同步的一种机制,与互斥量一起使用时,允许线程以无竞争的方式等待特定条件的发生关键函数初始化与注销线程等待线程唤醒示例一些思考条件变量实质是什么互斥量保护的是什么为什么用while来判断条件先唤醒线程还是先解锁ReferenceAbout me关键函数初始化与注销#include <pthread.h>// 静态初始化pthread_cond_t c原创 2017-12-16 14:34:43 · 666 阅读 · 0 评论 -
cJSON的秘密
学习使用cJSON过程的一些发现和总结,不涉及具体的函数 cJSON简介cJSON是一个快速,高性能的json解析器,由C语言编写,仅包含cJSON.c和cJSON.h两个文件,不支持跨平台;跨平台推荐纯lua写的dkjsoncJSON结构体cJSON结构体的组成:typedef struct cJSON { struct cJSON *next, *pr...原创 2018-05-07 09:37:01 · 2224 阅读 · 1 评论 -
C语言配置文件解析库——iniparser
C语言配置文件解析库——iniparser前言:在对项目的优化时,发现Linux下没有专门的供给C语言使用的配置文件函数,于是搜索到了iniparser库,可以像那些面向对象语言一样,使用ini文件进行参数配置。介绍iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库有三种下载方式: 1. 官方网站 2. 我的github 3. 我的网盘原创 2015-10-22 21:16:49 · 16091 阅读 · 4 评论 -
C语言实现优先级队列——priqueue
C语言实现优先级队列在回顾一个学长的项目时,发现他在串口的多线程操作时不是单纯的使用互斥量在读写操作时来共享串口,而是使用了一个优先级队列,在共享串口的基础上,可以设定读或写命令的优先级来决定命令执行序列。在这里,我来分享这个优先级队列的源代码,虽然自己还不是吃的很透,但是现在这里留下记录,希望下次使用时能更进一步,也欢迎大家在下面讨论,交流。源码:priqueue反馈与建议微博:@AnSwEr不原创 2015-10-22 00:45:46 · 2926 阅读 · 0 评论 -
C语言实现直角坐标转换为极坐标
需要利用数学库中的数学函数,废话不多说了,直接贴code:#include#include#define RAD_TO_DEG (180/(4*atan(1)))//pi=4*atan(1)typedef struct polar_y{double magnitude;//与极点的距离double angle;//角度}POLAR_V;typedef struct rect原创 2015-03-20 20:56:47 · 15162 阅读 · 6 评论 -
用户交互程序小技巧
当我们需要通过程序向用户获取一个字符命令时,我们可以这样做:scanf("%c",&ch);getchar();后一句的作用是吃掉上一句在IO遗留下来的回车,不然下一次再执行这个语句时,就会首先读取到回车符,而非是用户输入的字符。下面再来讨论以下scanf函数与几个其他IO函数的区别:读取字符时:scanf()以Space、Enter、Tab结束一次输入,原创 2015-03-17 21:07:56 · 776 阅读 · 1 评论 -
交互式程序的字符读取技巧
在交互式程序中,如果我们只需要读取一个字符,如输入abc,但是我们只需要a。要实现这种特性,需要以下动作:while(getchar() != '\n')continue;/*跳过输入行的剩余部分*/这个循环从输入读取字符,直到出现由回车键产生的换行字符。注意,函数返回值没有被赋值给ch,因此,字符仅被读取并丢弃。因为最后一个被丢弃的字符是换行符,所以下个读入的字符是下一行的首字符。如果原创 2015-03-16 12:37:51 · 1356 阅读 · 1 评论 -
位操作和字符转换的一些小问题
今天做到一道题目,大致是要求是编写一个将二进制字符串转化为数字值的函数。也就是说,如果您有以下语句: char * pbin = "01001001";那么您可以将pbin作为一个参数传送给该函数,使该函数返回一个int值25。其中有一段核心代码,一开始没怎么看懂,所以贴出来讨论一下。while(*pb != '\0') number=(number这里的移位操作相当于这个数乘以2原创 2015-03-15 17:51:13 · 835 阅读 · 1 评论 -
linux下C时间编程(1)——时间显示与转换
时间显示: 本文将着重阐述在linux下C开发中实际应用的时间编程的一些方法和技巧,对一些原理性的东西并不进行深入的讨论,如果读者有更深刻的理解,欢迎加入讨论。 在实际C开发中,我们常常需要输出或者让程序显示当前系统时间,例如生成日记文件、游戏开发等等。回想一下,在命令行中我们使用date来实现这一功能,然而在程序中如何实现呢?相信有一些C基础的读者第一时间会想到time()函数。下面原创 2014-12-14 14:54:22 · 4112 阅读 · 3 评论 -
system函数的使用与说明
函数名:system()头文件:函数原型:int system(const char * string);功能:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略原创 2015-04-04 14:18:51 · 4783 阅读 · 0 评论 -
getch函数的使用与说明
函数名:getch()原型:int getch(void);功能:在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。在linux平台下时(即包含的是curses.h),还应该在使用函数之前使用initscr(),使用完毕之后调用endwin().否则的话不需输入就会返回。返回值:从键盘读取的字符。用法:常用作程序调试结束时,等待调试者按下任意键退出。原创 2015-04-04 14:13:15 · 4614 阅读 · 0 评论 -
itoa函数的使用与说明
原型:char *itoa( int value, char *string,int radix);value:欲转换的数据;string:目标字符串的地址;radix:转换后的进制数,可以是10进制、16进制等。功能:把一个整数转换成字符串。说明:itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。标准库中有sprintf,功能比原创 2015-04-04 14:23:20 · 33374 阅读 · 1 评论 -
atoi函数的说明与使用
atoi()函数:1.功能:把字符串转换成整型数。2.原型:int atoi(const char *nptr);说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。3.头文件:4.实例:源码:#inc原创 2015-04-03 15:57:38 · 10045 阅读 · 0 评论 -
protobuf-c学习小结
由于项目的需要,利用了一下午进行了protobuf-c的学习,下面来总结一下。简介:protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布原创 2015-04-10 12:20:29 · 4161 阅读 · 5 评论 -
讨论main函数执行结束后还能在执行一段代码吗?
今晚突然脑中出现了这个问题,于是通过查找一些资料来进行一下解答。要实现这个功能就需要使用atexit()函数,乍一看似乎是和exit()函数有关系,所以我们就先来复习一下exit()函数。exit():通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。main函数结束时也会隐式地调用exit()函数。原型:void exit(int state);sta原创 2015-04-07 22:14:19 · 3213 阅读 · 0 评论 -
C语言字符指针和字符数组的区别
废话不多说,直接上代码:#includeint main(){ char str[]="hello78"; char *str1="world"; printf("%p\n",str); printf("%p\n",str1); printf("%s\n",str); printf("%s\n",str1); return 0;}原创 2015-06-12 22:08:18 · 3509 阅读 · 0 评论 -
Linux C编程的DEBUG宏
#if defined(DEBUG_PRINT)#define DEBUG(...)\ do{\ fprintf(stderr,"-----DEBUG-----\n");\ fprintf(stderr,"%s %s\n",__TIME__,__DATE__);\ fprintf(stderr,"%s:%d:%s():",__F原创 2015-08-13 21:36:12 · 3581 阅读 · 0 评论 -
交换两个值的方法
交换两个值的方法1.利用temp变量交换temp=a;a=b;b=a;2.加减法交换b = a - b;a = a - b;b = a + b;3.异或交换a = a ^ b;b = a ^ b;a = a ^ b;原创 2015-08-15 15:56:50 · 935 阅读 · 2 评论 -
定义字符串的两种方式
定义字符串的两种方式数组定义char name[] = "answer"指针定义char *name = "answer"比较字符串里的字符可以修改,而字符串是一个常量,字符串里面的字符不能修改。>Tips:可以与我的另外一篇文章一起看。http://blog.youkuaiyun.com/u011192270/article/details/46475981原创 2015-08-15 15:38:57 · 8993 阅读 · 0 评论 -
Linux C编程的时间函数例程
Linux C编程的时间函数例程前言:本文将介绍一些时间函数,但不会一一解释这些函数,只是提供这些函数所返回的值来方便开发者的使用。time()返回当前时间和日期距1970.1.1 00:00:00经过的秒数。#include<stdio.h>#include<time.h>int main(void){ printf("%lds\n\n",time(NULL)); return原创 2015-10-05 20:25:13 · 866 阅读 · 0 评论 -
2016 C语言面试题——字符串函数的实现
C语言各类字符串函数的实现开学就要开始找工作了,我觉得这些函数被问到的几率还是很大的,所以在这里与大家分享strlen函数原型:#include <string.h>unsigned int strlen (char *s);功能:计算指定的字符串s 的长度,不包括结束字符”\0”。我的实现:/****************************************************原创 2015-08-15 16:42:12 · 2926 阅读 · 0 评论 -
LINUX C编程中strtok()函数介绍
strtok的函数原型为char *strtok(char *s, char *delim),功能为“Parse S into tokens separated by characters in DELIM.If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. ” 翻译成汉语就是:作用于字符串转载 2015-03-23 23:37:31 · 1217 阅读 · 1 评论