
C/C++
文章平均质量分 66
小丑鱼_y
这个作者很懒,什么都没留下…
展开
-
调试技巧:让printf在终端输出带颜色的文本
格式如下printf("\033[31m red \n\033[0m");原创 2014-10-25 09:58:24 · 1278 阅读 · 0 评论 -
Linux线程同步
线程同步-互斥锁 1.初始化互斥锁pthread_mutex_init() int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); 例: pthread_mutex_t mutex; pthread_mutex_init(&mut原创 2015-07-04 20:24:17 · 891 阅读 · 0 评论 -
Windows下编译并使用libcurl.lib静态库
1.下载最新版的libcurl,我的是curl-7.44.0.zip,解压,进入目录winbuild,仔细阅读BUILD.WINDOWS.txt这篇文档打开VS2013 开发人员命令提示并执行nmake /f Makefile.vc mode=static VC=12完成编译后libcurl静态库会出现在builds目录下包括头文件和libcurl_a.lib,我们需要的是builds原创 2015-08-26 10:09:12 · 18172 阅读 · 0 评论 -
error LNK2019: 无法解析的外部符号 __imp____iob_func
在VS2015中使用静态库时编译出错1>libcurl_md.lib(cookie.obj) : error LNK2019: 无法解析的外部符号 __imp____iob_func,该符号在函数 _Curl_cookie_init 中被引用1>libcurl_md.lib(url.obj) : error LNK2001: 无法解析的外部符号 __imp____iob_func1>l原创 2015-09-23 18:06:50 · 17504 阅读 · 5 评论 -
标准IO库缓冲区buffer
缓冲区buffer:一个存储区域,用于保存数据。IO设施通常将输入输出数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显式地刷新输出缓冲,以便强制将缓冲区中的数据写入输出设备。默认情况下,读cin会刷新cout,程序非正常终止时也会刷新cout原创 2014-07-24 15:33:14 · 910 阅读 · 0 评论 -
Linux进程相关,fork,wait,waitpid,WIFEXITED
我们可以通过调用fork创建一个新进程。这个系统调用复制当前进程,在进程表中创建一个新的表项,新表项中的许多属性与当前进程是相同的。新进程几乎与原进程一模一样,执行的代码也完全相同,但新进程有自己的数据空间、环境和文件描述符。fork和exec函数结合在一起使用就是创建新进程所需要的一切了。#include pid_t fork(void);在父进程中的fork调用返回的是新的原创 2015-09-16 14:45:19 · 852 阅读 · 0 评论 -
exec函数族
exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。在Linux中使用exec函数族主要有两种情况:● 当进程认为自己不能再为系统和用原创 2015-09-16 10:54:14 · 666 阅读 · 0 评论 -
libcurl的C语言接口使用过程
全局初始化libcurl使用之前必须执行全局初始化,而且只能执行一次。使用easy interface为了使用easy interface,必须创建一个easy hadle。CURL *easy_handle = curl_easy_init();通过curl_easy_setopt来设置handle的属性设置请求链接来下载资源ret = curl_easy原创 2015-08-05 17:57:53 · 3595 阅读 · 0 评论 -
libcurl使用HTTP的get请求来下载文件
首先设置好下载链接int ret = curl_easy_setopt(easy_handle, CURLOPT_URL, "http://speedtest.wdc01.softlayer.com/downloads/test10.zip");然后设置CURLOPT_WRITEFUNCTION属性保存接受的数据ret |= curl_easy_setopt(easy_handle,原创 2015-08-05 18:14:10 · 3071 阅读 · 0 评论 -
libcurl实现断点续传
实现断点续传主要就是通过curl_easy_setopt设置好CURLOPT_RESUME_FROM_LARGE属性完成首先获取已下载文件大小,然后设置CURLOPT_RESUME_FROM_LARGE属性,从指定字节开始下载// Get the local file size,return -1 if failed_off_t getLocalFileLength(string pat原创 2015-08-05 18:41:31 · 9001 阅读 · 0 评论 -
Linux文件锁和fcntl系统调用
1.Linux 中的文件锁Linux 支持的文件锁技术主要包括劝告锁(advisory lock)和强制锁(mandatory lock)这两种。此外,Linux 中还引入了两种强制锁的变种形式:共享模式强制锁(share-mode mandatory lock)和租借锁(lease)。在 Linux 中,不论进程是在使用劝告锁还是强制锁,它都可以同时使用共享锁和排他锁(又称为读锁和写锁)原创 2015-09-10 18:27:24 · 2185 阅读 · 0 评论 -
indent-C语言代码格式化工具
indent可以让C代码格式化,更方便阅读安装 indent for Windows下载地址http://gnuwin32.sourceforge.net/packages/indent.htm找到Download下载Complete package,然后安装 indent for Linux下载地址http://www.gnu.org/prep/f原创 2014-07-22 09:22:14 · 3429 阅读 · 0 评论 -
C++11之std::bind
std::bind原型声明template/*unspecified*/ bind( F&& f, Args&&... args );template/*unspecified*/ bind( F&& f, Args&&... args );将参数绑定到函数或者对象身上调用参数f是一个回调对象(可以是函数,函数指针,函数引用,指向成员函数的指针,指向数据成员的指针)ar原创 2014-11-12 01:07:11 · 653 阅读 · 0 评论 -
Thinking In Linux C/C++字节对齐详解
一.什么是字节对齐,为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对 齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能转载 2015-07-31 11:43:25 · 594 阅读 · 0 评论 -
系统调用read,write和标准库fread,fwrite的区别
read,write属于Linux系统调用,fread,fwrite属于C语言标准库使用系统调用会影响系统的性能。与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。减少这种开销的一个好方法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。例如,每次读写大量的数据而不是每次仅读写一个字符。原创 2015-09-10 11:14:57 · 4494 阅读 · 2 评论 -
C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一转载 2015-07-31 11:53:14 · 1162 阅读 · 0 评论 -
log4cpp-c++日志库
1.building log4cpp./configuremakemake checkmake install安装完毕后,会在 /usr/local/ 里的include和lib文件夹里面看到了log4cpp的头文件和库文件原创 2014-07-24 15:34:05 · 1655 阅读 · 0 评论 -
代码的编译连接与执行过程
1. 编译一个源文件,经过编译系统的处理,生成目标文件的过程叫编译。a.cpp经过编译后在linux下会生成a.o这个目标文件。目标文件主要用来描述程序在运行过程中需要放在内存中的内容,这些内容包括两大类——代码和数据。相应的目标文件也分成代码段和数据段。 代码段(.text)中的内容就是源文件中定义的一个个函数编译后得到的目标代码,a.o的代码段中应当包含main函数的代原创 2014-07-23 10:40:01 · 2339 阅读 · 0 评论 -
C/C++是怎么通过宏定义来判断操作系统的
详见Qt的qglobal.h我们写C/C++代码时也可以参考这个来确定所在平台/* The operating system, must be one of: (Q_OS_x) DARWIN - Darwin OS (synonym for Q_OS_MAC) SYMBIAN - Symbian MSDOS - MS-DOS and Win原创 2015-08-05 11:11:32 · 10561 阅读 · 0 评论 -
大小端问题
大小端问题 最近工作中,有两次遇到大小端问题,所以花时间写这篇日志,总结一下。1. 实际需求 (1) 前段时间写了一个修复损坏的gzip文件的tool,在Linux Server上编译运行没有问题。但是在Solaris Server上运编译运行,结果总是和预期的不一致,跟踪发现是由大小端问题导致的; (2) 最近在写转载 2015-07-31 11:40:20 · 588 阅读 · 0 评论 -
gcc编译选项
gcc -Dmacro=value相当于程序中#define macro value原创 2014-10-24 11:32:38 · 713 阅读 · 0 评论 -
libcurl获取下载进度百分比,下载速度,剩余时间
如果希望获取下载或者上传进度相关信息,就给CURLOPT_NOPROGRESS属性设置0值int ret = curl_easy_setopt(easy_handle, CURLOPT_URL, "http://speedtest.wdc01.softlayer.com/downloads/test10.zip");ret |= curl_easy_setopt(easy_handle, C原创 2015-08-05 18:32:50 · 15983 阅读 · 2 评论