
C/C++
a_ran
程序员,公众号:进击的代码
展开
-
oh-my-zsh git 慢/卡顿问题解决
在 oh-my-zsh 进入 包含 git 仓库目录时,会变的平时慢/卡顿如下图:原因是因为 oh-my-zsh 要获取 git 更新信息解决办法:设置 oh-my-zsh 不读取文件变化信息(在 git 项目目录执行下列命令)$ git config --add oh-my-zsh.hide-dirty 1效果如下图:如果你还觉得慢,可以再设置 oh-原创 2017-06-02 19:02:07 · 30602 阅读 · 4 评论 -
jsoncpp linux平台编译和 arm移植
jsoncppsoncpp is an implementation of a JSON (http://json.org ) reader and writer in C++. JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to rea原创 2015-04-25 23:15:09 · 6491 阅读 · 4 评论 -
json-c arm移植
json-cJSON-C implements a reference counting object model that allows you to easily construct JSON objects in C, output them as JSON formatted strings and parse JSON formatted strings back into th原创 2015-04-25 23:10:35 · 5749 阅读 · 1 评论 -
libiconv arm移植
libiconvThis library provides an iconv() implementation, for use on systems which don’t have one, or whose implementation cannot convert from/to Unicode.下载http://ftp.gnu.org/pub/gnu/libico原创 2015-04-25 22:33:47 · 3913 阅读 · 0 评论 -
curl arm移植
curlcurl is a command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SF原创 2015-04-26 07:48:44 · 3603 阅读 · 0 评论 -
libpcap arm移植
libpcapa portable C/C++ library for network traffic capture.下载http://www.tcpdump.org/#latest-release或者到这里:http://download.youkuaiyun.com/detail/chinaeran/8631799编译注:此处使用 arm-linux-gnue原创 2015-04-26 07:44:34 · 5086 阅读 · 0 评论 -
libini arm移植
libiconvAn INI file parser that can read, edit and create large INI files. Usable under Microsoft Windows, DOS, Linux, etc. Supported languages are C, C++, Visual Basic, Java, TCL, Perl, Python, e原创 2015-04-26 07:47:13 · 2605 阅读 · 0 评论 -
C语言结构体初始化的三种方法
直接上示例了#include struct student_st{ char c; int score; const char *name;};static void show_student(struct student_st *stu){ printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu原创 2015-03-30 19:46:38 · 21897 阅读 · 1 评论 -
Linux socket 网络编程常见问题总结
网络编程常见问题总结 串讲(一) 网络编程常见问题总结 6 I& I! E- x8 Z+ p- U- B 在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出. . e3 Y0 @* _- e1 G- B% R 对于网络编程的更多详细说明建议参考下面的书籍 《UNIX网络编程》 《转载 2015-03-06 16:17:56 · 5067 阅读 · 0 评论 -
Linux socket 阻塞与非阻塞,同步与异步、I/O模型
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理转载 2015-03-05 17:05:39 · 5700 阅读 · 0 评论 -
每个 C 程序员都应知道的关于未定义行为的那点事(中篇)
译自:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html(可能需翻墙)原日译版:http://blog-ja.intransient.info/2011/05/c-23.html 在第一部分,我们讨论了是什么未定义行为,以及它如何允许 C 及 C++ 编译器产生较“安全”语言性能为高之代转载 2015-01-06 09:18:25 · 3275 阅读 · 0 评论 -
每个 C 程序员都应知道的关于未定义行为的那点事(上篇)
译自:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html(可能需翻墙)原日译版:http://blog-ja.intransient.info/2011/05/c-13.html 人们有时会问为什么打开优化后 LLVM 编译出的代码会引发 SIGTRAP。仔细钻研之后,他们发现 Clang 生转载 2015-01-06 09:14:44 · 2691 阅读 · 0 评论 -
cconv arm移植
cconvcconv(pronunciation: see-conv.) is iconv based simplified-traditional chinese conversion tool. It is NOT only transcoding programm, but also TRANSLATE tools between the Simplified Chinese and原创 2015-04-25 22:35:28 · 1360 阅读 · 0 评论 -
Linux fork 后 wait 获取子进程结束的状态示例
使用 fork 后,可能需要获取 fork 的进程的运行状况,比如有没有异常、崩溃。wait 在 man 中关键的描述如下:All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child原创 2015-07-01 23:18:52 · 3977 阅读 · 0 评论 -
CentOS 6 升级 gcc 和 g++ 的方法
CentOS 6 系统自带的 gcc 或者 g++ 的版本是:g++ (GCC) 4.4.6. GCC 版本太旧,导致了很多使用上的不便,如:无法使用g++ -std=c++11 命令来编译 C++11、无法使用Vim的很多插件(YouCompleteMe等)。因此,有必要对它进行升级。对 GCC 升级无法直接使用:yum update gcc以下是升级的详细过程。转载 2017-08-03 16:23:23 · 2264 阅读 · 0 评论 -
c/c++ max/min 4种实现方法
1. 简单的宏实现#define max(a,b) (((a) > (b)) ? (a) : (b))#define min(a,b) (((a) 2. 内核的宏实现/* safe min & max *//* avoid ++/-- expand twice *//* compile warning if type diff */#define min(x, y) ({ \原创 2017-07-10 12:02:17 · 21287 阅读 · 2 评论 -
linux 下好用的 git 代码查看工具
在 git 合并两个分支产生冲突时,需要手动合并,而有些时候并不是很容易对比出该怎么合并,这就需要 git 代码查看工具来对比两个分支中当时同时修改了什么,该怎么合并以前项目有 redmine git 网站,现在发现 giggle 或 gitg 也很好用,特此记录注:个人更推荐 giggle,因为 gitg 查看代码时并不能查找(醉),giggle 浏览代码更方便安装方法:查看原创 2017-07-19 15:53:36 · 4551 阅读 · 0 评论 -
c/c++ curl smtp 发送邮件 foxmail 中文乱码问题解决
在Linux下,当使用 libcurl 库发送邮件时,发现 windows 下的 foxmail 接收邮件乱码,而浏览器端不乱码。解决办法:内容类型和 utf-8 编码设置在设置邮件内容 "To: ", 'From: ' 等内容之前添加:"content-type:text/plain;charset=utf-8\r\n"即可此外,如果你想发送 html 格式的邮件内容,可以设原创 2017-07-05 11:51:05 · 3667 阅读 · 0 评论 -
c/c++ curl smtp 发送邮件太长导致段错误的问题
在Linux下,使用 libcurl 库发送邮件,当邮件长度超过16000字节时(具体应该为 16000 ~ 17000之间), 执行到 curl_easy_perform(curl); 会发送段错误下面看一下 curl 提供的 smtp 示例:#include #include #include /* This is a simple example showing ho原创 2017-07-10 12:03:35 · 2551 阅读 · 0 评论 -
线程创建 pthread_create 中自定义参数注意事项
1. 函数原型intpthread_create(pthread_tthread, const pthread_attr_tattr, void(start_routine) (void), voidarg);本文主要讨论最后一个参数,同时传递多个的问题(如果只传递一个 int char 等长度小于指针的数据类型,可以直接传,然后在线程内把 (v原创 2017-02-10 18:34:10 · 5178 阅读 · 1 评论 -
Linux C语言 格式化输出时间函数 strftime()
今天在做根据日期时间+ID作为文件名存储时,用到了格式化时间的要求,如果单纯用struct tm这个结构体中获取到的信息来拼接字符串的话,如果是个位数,则不会在前面补0,比如我需要的是20130306,如果采用snprintf拼接字符串时获取到的时201336,这与我之前设想的有所不同,记得以前曾经自己实现过一个格式化的函数,但是比较繁琐。于是google了一下竟然还真有一个这样的函数:strft转载 2014-11-13 09:28:14 · 9247 阅读 · 1 评论 -
Linux中内存buffer和cache的区别
细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.先来说说free命令[root@server ~]# free -m total used free转载 2016-01-13 18:28:06 · 5894 阅读 · 0 评论 -
Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip
获取本地 ip 地址,mac,通过域名获取对应的 ip,是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数),直接上代码:#include #include #include #include #include #include #include #include #include #include #include #define MAC_S原创 2014-12-11 20:15:03 · 9561 阅读 · 0 评论 -
Source Insight 3.X utf8 支持插件
继上次SI多标签插件之后,因为公司内部编码改为 utf8 编码, 因此特意做了这个Source Insight 3.X utf8 插件.下载链接: http://download.youkuaiyun.com/detail/chinaeran/9106117安装说明:解压msimg32.dll sihook.dll siutf8.dll 到Source Insight 3.X安装目录转载 2015-09-15 09:17:25 · 2349 阅读 · 0 评论 -
Linux 线程分离状态
线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。线程的分离状态决定一个线程以什么样的方式来终止自己。在上面的例子中,我们采用转载 2015-02-10 20:09:12 · 2338 阅读 · 0 评论 -
Linux 线程调度与优先级设置
Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平转载 2015-02-12 10:46:17 · 35463 阅读 · 1 评论 -
阮一峰:Make 命令教程
代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。本文介绍Make命令的用法,从简单的讲起,不需要任何基础,只要会使用命令行,就能看懂。我的参考资料主要是Isaac转载 2015-02-25 13:58:54 · 5102 阅读 · 0 评论 -
ubuntu/linux mint 创建proc文件的三种方法(三)
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);示例四:在proc文件中使用内核链表的一个示例(用的方法三)。原创 2014-07-10 02:53:48 · 9957 阅读 · 2 评论 -
ubuntu/linux mint 创建proc文件的三种方法(四)
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);示例四:在proc文件中使用内核链表的一个示例(用的方法三)。原创 2014-07-10 02:57:11 · 2860 阅读 · 0 评论 -
Linux rmdir 命令实现(特别版)
本文地址:http://blog.youkuaiyun.com/a_ran/article/details/25250583在学习linux系统编程的时候,实现了rmdir命令的特别版本。因为rmdir只能删除空文件夹,而我实现的功能相当于 rm -rf path...实现的功能: 递归删除指定文件夹的所有文件程序说明:1. my_rmdir(): 即为递归删除动作的自定义函原创 2014-05-10 23:09:29 · 2970 阅读 · 1 评论 -
Linux ls 命令实现(简化版)
在学习linux系统编程的时候,实现了ls命令的简化版本。实现的功能如下:1. 每种文件类型有自己的颜色 (- 普通文件, d 目录文件, l 链接文件, c 字符设备文件, b 快设备文件, p 管道文件, s socket文件。共7种)2. 支持的参数有 -hali (a: 显示隐藏文件, i: 显示inode节点号,l: 以列表形式显示文件的详细信息,h: 人类可读的文件大小显示原创 2014-05-07 08:21:07 · 5978 阅读 · 1 评论 -
杨辉三角的变形 庞果网 (C/C++实现)
注:已通过测试题目详情: 1 1 1 1 1 2 3 2 11 3 6 7 6 3 1以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-原创 2014-02-11 17:34:35 · 1737 阅读 · 0 评论 -
排列搜索 庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)
注:虽然没有通过测试,但学会了用递归实现全排序的方法(话说此题的通过率真低呀,哪位高手知道正确答案呢?)题目详情:设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3],问:有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0]+a[a[b[1]]]*b[1]+a[a[b[2]]]*b[2]+a[a[b[原创 2014-02-08 23:18:09 · 2388 阅读 · 4 评论 -
寻找直方图中面积最大的矩形(C语言版)
寻找直方图中面积最大的矩形。我是用循环实现的,肯定不是最优的算法,欢迎留言讨论。给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。原创 2013-12-20 11:21:55 · 3719 阅读 · 0 评论 -
C++ explicit关键字 详解(用于构造函数)
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2013-12-18 22:36:26 · 19673 阅读 · 1 评论 -
C++ STL std::copy 详解
如果要把一个序列(sequence)拷贝到一个容器(container)中去,通常用std::copy算法,代码如下:std::copy(start, end, std::back_inserter(container)); 这里,start和end是输入序列(假设有N各元素)的迭代器(iterator),container是一个容器,该容器的接口包含函数push_back。假设conta转载 2013-12-17 23:37:16 · 49503 阅读 · 5 评论 -
经典问题----倒水(详细解析)
倒水 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。 我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。 可以进行的操作是: 把一个容器灌满; 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸); 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。 问是否能够通过有限次操作,使得水缸最后恰好有C升水。转载 2013-12-17 12:30:45 · 16567 阅读 · 1 评论 -
Linux系统编程之访问文件夹及其文件属性
1. 文件夹操作:opendir, readdir, closedir2. 文件属性:lstat代码示例如下实现功能:获取指定文件夹下所有的文件(使用递归),因此就能计算所有文件大小之类的啦。。。#include #include #include #include #include #include #include #include #define BUF_原创 2014-08-19 20:33:02 · 1760 阅读 · 0 评论 -
man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决办法
问题:在刚装好的 Mint/Ubuntu 可能会出现 man pthread_mutex 相关的函数没结果,如下图原创 2014-08-24 12:33:58 · 4496 阅读 · 0 评论 -
C/C++多文件共享全局变量时,使用extern的规范
关键字extern用来声明变量或者函数是一个外部变量或者外部函数,也就是说告诉编译器是在其他文件中定义的,编译的时候不要报错,在链接的时候按照字符串寻址可以找到这个变量或者函数。(函数默认是外部类型的,不需要显示声明,但是变量必须,如果想把一个函数声明为只在本文件范围有效,那么可以用static来说明) 在某个头文件,比如A.h中定义了全局变量比如int a;,那么在其他文件中的转载 2014-09-12 15:53:11 · 23625 阅读 · 0 评论