C语言
wu_cai_
这个作者很懒,什么都没留下…
展开
-
undefined reference to ‘powf@GLIBC_2.27’
在使用他人提供的ffmpeg动态库时,发生编译错误。undefined reference to ‘powf@GLIBC_2.27’参考这篇文章:https://answers.ros.org/question/327482/libflycaptureso-undefined-reference-to-powfglibc_227/问题原因: 编译ffmpeg动态库...原创 2020-03-10 11:17:14 · 12430 阅读 · 0 评论 -
linux 同步IO: sync、fsync与fdatasync
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)(Bach ...转载 2019-08-06 19:19:27 · 293 阅读 · 0 评论 -
用Valgrind定位子进程内存泄漏
1. valgrind跟踪子进程以下例子用spawn-cgi来测试验证,spawn-cgi会生成一个cgi子进程--trace-children=yes:valgrind加上该参数用于跟踪子进程valgrind --leak-check=full --trace-children=yes --tool=memcheck --log-file=a.log spawn-fcgi -a 12...转载 2019-04-16 17:52:58 · 2721 阅读 · 0 评论 -
linux环境内存分配原理 mallocinfo
Linux的虚拟内存管理有几个关键概念:Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢 ?Linux的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通...转载 2019-03-28 09:42:08 · 341 阅读 · 0 评论 -
malloc_stats---检查内存泄露的神器
在之前的博客中提到过,valgrind可以用来检测内存泄露,但在使用中,往往会遇到一些问题,给调试工作带来很多不必要的麻烦,我自己遇到的有以下两种:(1)内存泄露误检(系统初始化时,可能有一些需要长期保存在内存中的数据结构,这些空间是永远不释放的,而这些内存会被认为绝对泄露)(2) valgrind检查内存泄露过于全面,运行后的结果太多往往很难从中找到有用的信息。有...转载 2019-03-25 17:30:01 · 990 阅读 · 0 评论 -
Linux编程基础之进程等待(wait()函数
编程过程中,有时需要让一个进程等待另一个进程,最常见的是父进程等待自己的子进程,或者父进程回收自己的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数:wait()函数原型是#include <sys/types.h>/* 提供类型pid_t的定义*/#include <wait.h>int wait(int *status)函数功能是:父进程...转载 2019-03-11 20:43:41 · 677 阅读 · 0 评论 -
采用epoll实现echo server和client
服务器代码:#include <sys/socket.h> #include <sys/epoll.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #inc...转载 2019-03-07 17:40:40 · 617 阅读 · 0 评论 -
EAGAIN、EWOULDBLOCK、EINTR与非阻塞的长连接
EWOULDBLOCK: 用于非阻塞模式,不需要重新读或者写EINTR: 指操作被中断唤醒,需要重新读/写EAGAIN:Resource temporarily unavailable,这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步EAGAIN详解:在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN...转载 2019-03-07 10:06:46 · 628 阅读 · 0 评论 -
浅析套接字中SO_REUSEPORT和SO_REUSEADDR的区别
转载地址:https://blog.csdn.net/yaokai_assultmaster/article/details/68951150Socket的基本背景在讨论这两个选项的区别时,我们需要知道的是BSD实现是所有socket实现的起源。基本上其他所有的系统某种程度上都参考了BSD socket实现(或者至少是其接口),然后开始了它们自己的独立发展进化。显然,BSD本身也是随着时间...转载 2019-02-07 10:40:30 · 251 阅读 · 1 评论 -
gcc程序的编译过程和链接原理
一、C/C++文件的编译过程:先来看一下gcc的使用方法和常用选项提示:gcc --help Ⅰ、使用方法:gcc [选项] 文件名Ⅱ、常用选项:选项 含义 选项 含义 -v 查看gcc编译器的版本,显示gcc执行时的详细过程 -o <file> ...转载 2019-02-05 23:09:59 · 328 阅读 · 0 评论 -
getopt 函数的简单使用
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴。好了,虽然啰嗦了点,但确实是忠告。步入正题:我们的主角----getopt()函数。英雄不问出处,getopt()函数的出处就是unistd.h头文件(哈哈),写代码的时候千万不要忘记把他老人家include上。 再来看一下这家伙的原型(不是六耳猕猴):int getopt(int argc,char...转载 2019-01-26 17:43:22 · 866 阅读 · 1 评论 -
warning: integer overflow in expression [-Woverflow]
C语言大数字表示易错点错误事例#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;int main() { off_t bigNum = (4000 * 1024 * 1024 * 1024); printf("bigNum:%ld\n&qu原创 2019-01-04 11:00:58 · 9815 阅读 · 1 评论 -
大小为0的数组
size为0的数组是GUN C支持的一个特性,这个特性可以用来模拟动态大小的数组,同时又避免了一些问题,所以还是比较有实际意义的一个小技巧。在网上参考了一些资料,大多数资料都是以结构体中包含一个大小为0的数组为例。我想这样可能是基于两点考虑: 因为动态大小是“模拟”出来的,所以不可避免要申请空间,那么对于申请空间而言,以一个结构体的形式来申请,是比较方便的; 容易与别的实现方法做对比,...转载 2018-08-23 14:15:30 · 2297 阅读 · 0 评论 -
sscanf,sscanf_s及其相关用法
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........);函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返回值 成功则返回参数数目,失败则返回-1,错误原因...转载 2018-08-15 13:49:32 · 6380 阅读 · 1 评论 -
函数指针
转自:函数指针什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针(注意:大部分情况下,可以这么认为,但这种说法并不很严格)。函数指针的...转载 2018-04-23 20:49:37 · 192 阅读 · 0 评论 -
malloc函数分配内存失败的原因及解决方法
先说结论malloc()函数分配内存失败的原因: 1. 内存不足。 2. 在前面的程序中出现了内存的越界访问,导致malloc()分配函数所涉及的一些信息被破坏。下次再使用malloc()函数申请内存就会失败,返回空指针NULL(0)。解决方法: 1.在STM32中堆空间内存不足的解决方法可以参考我上一篇文章 STM32分配堆栈空间不足问题原因及解决方法 http://blog.csdn.net...转载 2018-02-08 10:39:37 · 9042 阅读 · 0 评论 -
C/C++变长参数实现log输出
__VA_ARGS__宏使用说明#define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__); 上面的宏是使用qDebug输出调试信息,在非Qt的程序中也可以改为printf,守护进程...转载 2018-02-26 15:49:18 · 574 阅读 · 0 评论 -
C 语言资源大全
转载地址:http://blog.jobbole.com/95054/C 语言资源大全koz.ross 维护的一个 C 语言资源列表,包括了:构建系统、编译器、数据库、加密、初中高的教程/指南、书籍、库等等。【特别提示】:伯乐在线已经在 GitHub 上发起了C 语言资源大全中文版的整理项目,链接:https://github.com/jobbole/awesome-c-cn。欢迎收藏和扩散。我们转载 2018-01-19 15:44:18 · 656 阅读 · 0 评论