来看这个代码
#include <stdio.h>
#include <assert.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <string.h>
#include <sys/epoll.h>
#include <netinet/in.h>
#include <arpa/inet.…… 阅读全文
Tag Archives: Linux
Linux 查看两个文件的交集
这个是很常见的需求,假如两个文件
123
456
789
123
789
abc
我等劳模,上来就挽袖子,自己写脚本了
#!/usr/bin/env python
import sys
def calc_uniq(file1, file2):
file1 = open(file1)
file2 = open(file2)
set1 = set()
set2 = set()
for line in file1:
se…… 阅读全文
gcc 查看链接库路径
当我们想知道 gcc 在链接的时候使用了什么库的时候,可以使用这样的命令
$ gcc --print-file-name=librt.so
/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/librt.so
之前用过一次,今天再用的时候差点又忘了,简单记一下
阅读全文
libevent 库上手
先来看一个基于定时器的事件驱动
#include <stdio.h>
#include <event.h>
void onTime(int sock, short event, void* arg) {
printf("hi there\n");
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
event_add((struct event*)arg, &tv);
}
int main(…… 阅读全文
gcc 编译选项顺序导致的找不到定义
在使用 gcc 或者 g++ 进行编译,并链接外部的库的时候,发现了一个问题,明明使用了 -L 参数对库文件指明了链接,但是依然出错,报找不到定义,后来问过小组的人,才知道 gcc 的编译选项也有讲究的,看到这里,http://blog.csdn.net/lonfee88/…:
对于C/C++编译而言,读取编译选项是按照从左到右的顺序执行的(注1)…… 阅读全文
写一个日志模块
今天在写一个日志模块,遇到一些问题,学到了一些东西,记一下。
一开始想到,cpp 这么成熟的社区,日志这么基本的模块,应该现成的有很多吧,随便找一个来用就可以了,上网搜了一圈,发现真是一团混乱啊,看到这里,http://blog.csdn.net/junchaox/…
待选为 glog、log4cplus、log4cpp、log4cxx
目前准备使用glog,…… 阅读全文
cc 和 cpp 混合情况的 makefile
今天需要写一个 makefile,项目里面有 pb 生成的 cc 和 cpp 文件,分别要生成各自的 obj,以前没有遇到过这种 cc 和 cpp 混合的情况,上网找了一下,找到这个模版,http://lcinx.blog.163.com/blog…:
#
# c.cpp混合编译的makefile模板
#
#
BIN = test.exe
CC = gcc
CPP = g++
#这里只加入库头文件路…… 阅读全文
Google perftools cpu profiler 对多进程的支持问题
折腾了好久,到目前还是没有让 gperftools cpu profiler 能在多进程环境下跑起来,问题如下:
main_cmd_argv.cpp
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <gperftools…… 阅读全文
GCC “-fomit-frame-pointer”编译选项的含义
在 makefile 中看到这个编译选项,不太理解于是查了一下,相关的东西还不多,抄一下放在这里
首先这个文章,http://blog.csdn.net/byzs/arti…,讲的不错,挺清晰的:
优化你的软件时,发觉”-fomit-frame-pointer”这个选项还是蛮有用的。
GCC手册上面这么说:
Don’t keep the frame pointer in a…… 阅读全文
修改函数的返回地址
来看这个代码
#include <stdio.h>
void fun2() {
printf("haha\n");
}
void fun1(int a) {
int* ret_addr = (&a)-1;
*ret_addr = (int)fun2;
}
int main() {
int a = 3;
fun1(a);
return 0;
}
他跑起来之后的输出是这样的:
zrj@vm:~/tmp$ ./a.out…… 阅读全文