随笔分类 -  Linux环境编程

摘要:定义命令包 如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以“define”开始,以“endef”结束,如: define run-yacc yacc $(firstword $^) mv y.tab.c $@ endef 这里,“run-yacc”是这个命令包的名字,其不要和Makefil... 阅读全文
posted @ 2013-06-09 07:58 浪里飞 阅读(244) 评论(0) 推荐(0)
摘要:嵌套执行make 在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这样会很难维护我们的Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。 例如,我们有一个子目录叫subdir,这... 阅读全文
posted @ 2013-06-09 07:56 浪里飞 阅读(610) 评论(1) 推荐(0)
摘要:make的静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。我们还是先来看一下语法: <targets ...>: <target-pattern>: <prereq-patterns ...> <commands> ... targets定义了一系列的目标文件,可以有通配符。是目标的一个集合。 target-pat... 阅读全文
posted @ 2013-06-05 07:52 浪里飞 阅读(717) 评论(0) 推荐(0)
摘要:makefile中两重if判断 法一: ifeq ($(GCC_MINOR),$(filter $(GCC_MINOR),4 5)) filter X, A B will return those of A,B that are equal X. A variation of this is ifneq (,$(filter $(GCC_MINOR),4 5))... 阅读全文
posted @ 2013-06-04 07:59 浪里飞 阅读(3248) 评论(0) 推荐(0)
摘要:跟我一起写Makefile:使用条件判断 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。 示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects)... 阅读全文
posted @ 2013-06-04 07:53 浪里飞 阅读(616) 评论(0) 推荐(0)
摘要:makefile中宏定义 在Makefile中我们可以通过宏定义来控制源程序的编译。 只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可。 如: CFLAGS += -D __KK__ 相当于#define __KK__ 或 CFLAGS += -D __KK__=__XX__ 相当于 #define __KK__=__... 阅读全文
posted @ 2013-06-04 07:34 浪里飞 阅读(797) 评论(0) 推荐(0)
摘要:core dump 简介 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作core ,用线圈做的内存就叫作“core memory”。(线圈的单词应该是coil,呵呵)如今,半导体工业澎勃发展,已经没有人用线圈当内存了,不过,在许多情况下,人们还是把内存叫作“core”。 所以注意了:这里的core不是核心,而是内存。不过结合实际来看,好像也有点“... 阅读全文
posted @ 2013-05-26 23:19 浪里飞 阅读(475) 评论(0) 推荐(0)
摘要:wrk简介 wrk 是一个比较先进的 HTTP 压力测试工具。 测试方法: wrk -t8 -c400 -r10m http://localhost:8080/index.html 原文 http://www.oschina.net/p/wrk 阅读全文
posted @ 2013-05-17 07:54 浪里飞 阅读(352) 评论(0) 推荐(0)
摘要:Linux系统资源限制 1. 最大文件数 查看进程允许打开的最大文件句柄数:ulimit -n 查看进程所占的文件描述符: lsof -p xxx | wc -l 设置进程能打开的最大文件句柄数:ulimit -n xxx 2. ulimit -n vs. file-max ? 简单的说, ulimit -n控制进程级别能够打开的文件句柄的数量, 而ma... 阅读全文
posted @ 2013-05-14 01:50 浪里飞 阅读(1480) 评论(0) 推荐(0)
摘要:dlopen()是一个强大的库函数。该函数将打开一个新库,并把它装入内存。该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的。比如 Apache Web 服务器利用这个函数在运行过程中加载模块,这为它提供了额外的能力。一个配置文件控制了加载模块的过程。这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了。 当动态链接库操作函数执行失败时,dlerror可以返回出错... 阅读全文
posted @ 2013-05-14 00:53 浪里飞 阅读(777) 评论(0) 推荐(0)
摘要:① SIGINT 终止进程 中断进程 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出。 ② SIGQUIT 建立CORE文件终止进程,并且生成core文件 ③ SIGQUIT 和 SIGINT 类似,但由QUIT字符(通常是Ctrl-)来控制;进程在因收到SIGQUIT退出时会产生core文件,在这个意义上类似... 阅读全文
posted @ 2013-04-21 19:49 浪里飞 阅读(9968) 评论(0) 推荐(0)
摘要:标准I/O函数库执行以下三类缓冲: 1、完全缓冲意味着只在出现下列情况时才发生I/O缓冲:缓冲区满,进程显示调用fflush,或者进程调用exit终止;标准I/O缓冲区的通常大小为8192字节。 2、行缓冲意味着只是在出现下列情况时才发生I/O:碰到一个换行符,进程调用fflush,或者进程调用exit终止。 3、不缓冲意味着每次调用标准I/O输出函数都发生I/O。 ... 阅读全文
posted @ 2013-04-06 20:33 浪里飞 阅读(335) 评论(0) 推荐(0)
摘要:判断是大端字节序还是小端字节序 union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; if (sizeof(short) == 2) { if (un.c[0] == 1 && un.c[1] == 2) printf("big-endian\n"); ... 阅读全文
posted @ 2013-04-06 01:09 浪里飞 阅读(305) 评论(2) 推荐(0)
摘要:volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... ... 阅读全文
posted @ 2013-02-24 17:10 浪里飞 阅读(647) 评论(0) 推荐(0)
摘要:在写代码的时候,经常会用到读取系统时间的函数。localtime函数不是线程安全的。如果在多线程里调用localtime函数,很可能会出现问题。 多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的。 struct tm *localtime(const time_t *clock); struct tm* lo... 阅读全文
posted @ 2013-02-24 12:32 浪里飞 阅读(3471) 评论(0) 推荐(0)
摘要:首先,调用函数curl_global_init()来初始化库函数;记得最后调用curl_global_cleanup()来释放库资源。其次,调用curl_easy_init()来初始化一个句柄,得到一个easy interface型指针;curl_easy_init函数是线程相关的,也就是说不能在一个线程中调用另外一个线程通过curl_easy_init创建的CURL指针。记得最后要调用curl_easy_cleanup(easy interface);接着,再调用curl_easy_setopt来设置将要访问的网络地址。curl_easy_perform来执行下载。注意的是:libcurl的 阅读全文
posted @ 2013-02-24 12:02 浪里飞 阅读(2707) 评论(0) 推荐(0)
摘要:curl: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory 解决办法: ln -s /usr/lib/libcurl.so.3 /usr/lib/libcurl.so.4 原文: http://hi... 阅读全文
posted @ 2013-02-24 11:22 浪里飞 阅读(1007) 评论(0) 推荐(1)
摘要:#define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) __builtin_expect() 是 GCC (version >= 2.96)提供给程序员使用的,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。 ... 阅读全文
posted @ 2013-02-24 11:10 浪里飞 阅读(275) 评论(0) 推荐(0)
摘要:内存泄漏检测工具valgrind 1、安装 cd valgrind-3.2.3 ./configure make;make install 2、使用 valgrind --tool=memcheck --leak-check=full ./test 原文: http://www.cnblogs.com/Romi/archive/2012/08/28/2659998.html ht... 阅读全文
posted @ 2012-12-11 00:16 浪里飞 阅读(245) 评论(0) 推荐(0)
摘要:调试core文件 当获得了core文件以后,就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件。也可以用-c来指定core文件。 如: gdb [paremeter] app [paremeter] /app.core 然后输入bt(backtrace)或者where找到错误发生的位置和相应的堆栈信息。就可知道发生错误时的函数调用关系,然后可以使用up或者down查看... 阅读全文
posted @ 2012-12-09 18:32 浪里飞 阅读(244) 评论(0) 推荐(0)