![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
benbendy1984
这个作者很懒,什么都没留下…
展开
-
把当前目录添加为lib搜索目录
开发过程中,我们生成的lib需要放到/usr/lib 或者 /usr/local/lib 目录下面去,才能使用,而放到这些目录下,需要root权限,因此需要切换,比较的麻烦,通过下面的方法,就可以解决这个问题。 1 只设置个人修改~/.bash_profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH2原创 2010-03-18 18:11:00 · 712 阅读 · 0 评论 -
查看进程资源
<br />通过 ls /proc/pid 我们可以看到如下信息: <br /> <br />cmdline: 启动进程的命令和参数。<br />cwd: 指向进程当前目录的一个连接。<br />environ: 进程所有的环境变量。<br />fd: 进程所有打开的文件描述符,目录下是一个个以数字为名称的连接,指向了进程当前正在使用的文件。通过通过 ll 查看具体信息<br />maps, statm, mem: 进程的内存信息。<br />stat, status: 进程的状态信息,比如查看 /原创 2011-05-13 17:39:00 · 667 阅读 · 1 评论 -
linux 统计时间程序
想统计程序运行的时间,使用下面程序就可以了,可以比较算法的效率了#include #include int main(){ struct timeval tpstart,tpend; double timeuse; int i=0; gettimeofda原创 2011-07-07 13:30:34 · 647 阅读 · 0 评论 -
图片数据显示为图片
在nginx中把图片数据读入并返回给游览器,没有显示图片,而是实际的数据,原来是需要在http头部的 nContent-Type: image/jpeg,这样直接显示图片了。原创 2011-10-24 21:29:18 · 730 阅读 · 0 评论 -
linux 动态库和静态库
1 连接的优先级: 我们在编译中指定了 -labc ,那么首先去寻找对应路径下的 动态库 libabc.so ,如果找不到,那么再去寻找libabc.a 进行连接,所以当两者都出现的时候,默认连接动态库 2 库路径: 一中直接在编译中指定 -L/path_of_lib 二 修改环境变量原创 2011-11-03 13:57:25 · 928 阅读 · 0 评论 -
redis python接口问题
在对list队进行元素删除的时候(lrem), 标准文档中的三个参数 key, count, value , 按照这个调用python 接口一直不起作用,最后发现参数的顺序不是按照标准写的, 是按照 key, value, count 这个顺序的。 www.meishixing.com原创 2012-03-05 15:49:56 · 1710 阅读 · 0 评论 -
mysql group_concat
使用group by 可以对数据进行分组,那么我们想知道每个组内的成员怎么样,就可以使用group_concat,他能把组内的数据的字段进行聚合,形成一个新的字段 比如小朋友按照男和女的进行分组,那么分好后,你还可以知道男的小朋友具体有哪几个原创 2012-03-09 20:53:19 · 900 阅读 · 0 评论 -
redis中list长度
我们使用redis , 其中经常需要得到一个list长度,那么这个list长度是否存储了还是每次都需要遍历整个list呢? 看了下源码 78 unsigned long listTypeLength(robj *subject) { 79 if (subject->encoding == REDIS_ENCODING_ZIPLIST) { 80原创 2012-04-28 11:06:02 · 30797 阅读 · 2 评论 -
redis中ziplist
ziplist 是一个压缩的双向列表。传统的双向链表,在每个节点,都需要指向下一个和前一个节点的指针,占据了一定的空间;同时双向链表中使用字符串保存了节点的值,对于整形的数值而言,比较费空间。ziplist 在这些方面进行了一些优化。 下面跟着源码来学习下: 结构 其中 zlbytes 整个列表所占据的空间。原创 2012-07-28 16:49:20 · 4099 阅读 · 0 评论 -
内核模块
1 源代码 #include #include #include MODULE_LICENSE("DUAL BSD/GPL"); static int hello_init(void){ printk(KERN_INFO "Hello World!\n"); return 0;}static void hello_exit(void){原创 2012-10-17 13:41:10 · 1008 阅读 · 0 评论 -
内核基本概念
1 get_fs 和 set_fs 设置和得到用户能访问虚拟地址空间, 经常使用的两个直 kernel_ds和user_ds , 其中允许访问内核空间和用户空间,而后者只能访问用户空间。 我们在内核代码中经常看到如下代码//如果仅仅能访问用户空间,那么需要对地址进一步校验,是否超出用户空间if (!segment_eq(get_fs()原创 2012-10-18 10:57:29 · 1237 阅读 · 0 评论 -
leveldb 查找过程
我们先看下面代码1074 {1075 mutex_.Unlock();1076 // First look in the memtable, then in the immutable memtable (if any).1077 LookupKey lkey(key, snapshot);1078 if (mem->Get(lkey, valu原创 2013-05-19 15:17:52 · 2358 阅读 · 0 评论 -
memcache 线程模型
Mempool 采用主线程+工作线程的模型,主进程主要是:1创建工作线程 2接受连接并把任务分配给工作线程。子进程主要做具体的工作:解析请求,处理请求。1 创建工作线程先来看源代码/* * Initializes the thread subsystem, creating various worker threads. * * nthreads Number of worker event handler threads to spawn * main_base Event base原创 2011-03-12 11:07:00 · 3138 阅读 · 0 评论 -
memcache slabs
<br /> memcache 使用slab机制对内存进行分配和管理的。<br /> <br />一 整体结构<br /><br /> <br /> 把内存分成多个层次,在每个层次中,可以有多个page, 所有层次的page大小基本是一直的(为什么不相同,后面介绍),每个page中又分成相同大小的item,里面有多少个item,取决于page大小和item所在的层次,其中相邻层次直接item大小具有如下关系<br />原创 2011-03-01 20:42:00 · 4133 阅读 · 1 评论 -
readv/writev
<br />名称:readv/writev<br />功能:散布读/聚集写<br />头文件:#include <sys/uio.h><br />函数原形: ssize_t readv(int filedes,const struct iovec *iov,int iovcnt);<br /> ssize_t writev(int filedes,const struct iovec *iov,int iovcnt);<br />参数:filedes 文件描述符<原创 2010-07-15 11:38:00 · 1208 阅读 · 0 评论 -
sigprocmask
<br />功能描述:<br />检测或修改信号屏蔽字<br /><br /><br />用法:<br />#include <signal.h><br /><br />int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);<br /><br />参数:<br />how:用于指定信号修改的方式,可能选择有三种<br /><br />SIG_BLOCK //加入信号到进程屏蔽。<br />原创 2010-07-15 17:07:00 · 657 阅读 · 0 评论 -
sigsuspend
<br />功能描述:<br /> sigsuspend 函数将进程的信号屏蔽字设置为 sigmask 指向的值。在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程被挂起。如果捕捉到一个信号而且从该信号处理程序返回,则sigsuspend返回,在返回之前,将进程的信号屏蔽字设置为调用sigsuspend之前的值。<br /><br /><br />用法:<br />#include<signal.h><br />intsigsuspend(const sigset_t *原创 2010-07-16 10:30:00 · 1560 阅读 · 0 评论 -
Linux 非阻塞connect,错误码:EINPROGRESS
<br /> 当我们以非阻塞的方式来进行连接的时候,返回的结果如果是 -1,这并不代表这次连接发生了错误,如果它的返回结果是 EINPROGRESS,那么就代表连接还在进行中。 后面可以通过poll或者select来判断socket是否可写,如果可以写,说明连接完成了。<br />原创 2010-07-29 10:17:00 · 25856 阅读 · 3 评论 -
gdb 高级用法
<br />1 条件断点 <br /> <br />19 #include <stdio.h> 20 21 int main() 22 { 23 int i,j; 24 for( i = 0; i < 10; ++i) 25 {原创 2010-11-26 20:05:00 · 1544 阅读 · 1 评论 -
linux 栈大小的设置
<br /> 在程序运行中发现了一个断错误,最后发现在一个函数中申请了一个很大空间的数组,最后怀疑是栈空间不够了,通过查询,可以使用:<br />ulimit -a 进行查询 <br /> <br />core file size (blocks, -c) 0<br />data seg size (kbytes, -d) unlimited<br />scheduling priority (-e) 0<br />file siz原创 2010-10-19 16:13:00 · 13947 阅读 · 2 评论 -
守护进程与setsid(转)
<br />转自 : http://jiangshuiy.javaeye.com/blog/509534<br />关键字: linux守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。 <br /><br />守原创 2010-10-28 13:59:00 · 1080 阅读 · 0 评论 -
linux 系统函数学习
kill(传送信号给指定的进程)相关函数raise,signal表头文件#include#include定义函数int kill(pid_t pid,int sig);函数说明kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:pid>0 将信号传给进程识别码为pid 的进程。pid=0 将信号传给和目前进程相同进程组的所有进程(需要有发送的权限)pid=-1 将信号广播传送给系统内所有该进程有权限的进程pid参数sig代表的信号编原创 2010-10-30 14:16:00 · 554 阅读 · 0 评论 -
gdbinit 使用(转)
<br />使用gdb调试程序的时候,有时候需要设定多个断点,重复执行某些操作,而这些操作写起来比较麻烦,这个时候就应该想起来用gdb命令脚本了,它能够很好的完成这些工作。<br />以设置多个断点为例,我写的命令脚本为<br />---------------------------------------------------<br />#filename: .gdbinit<br />#gdb will read it when starting<br />file test_gdbscript<b原创 2010-12-29 20:14:00 · 23176 阅读 · 2 评论 -
fork 父子进程变量之间的关系
<br /> 调用fork,会有两次返回,一次是父进程、一次是子进程,因为子进程是父进程的副本,所以它拥有父进程数据空间、栈和堆的副本,它们并没有共享这些存储空间,它们只共享正文段。 我们通过下面的程序验证下。 19 #include<unistd.h> 20 #include<stdio.h> 21 22 int global = 6; 23 24 int main(int argc,char** argv) 25 { 26 int var=10;原创 2010-11-12 19:55:00 · 4785 阅读 · 2 评论 -
epoll lt 和 et
<br /><br />LT模式:epoll就是一个快速版poll,可读可写就绪条件和传统poll一致<br />ET模式:为了避免Starvation,建议 <br /> 1)文件描述符设置为非阻塞 <br /> 2)只在read或write返回EAGAIN后,才能调用下一次epoll_wait <br /> 3)应用层维护一个就绪链表,进行轮询,可以防止大量IO时在一个描述符上长期read或write(因为只有等到read <br />原创 2011-01-24 16:51:00 · 916 阅读 · 1 评论 -
linux 线程的条件锁
我们先看下面的代码#include #include #include pthread_mutex_t count_lock;pthread_cond_t count_nonzero;unsigned count = 0;void * decrement_count(void *arg) { pthread_mutex_lock (&count_lock); printf("1/n"); while(count==0) {原创 2011-01-26 15:40:00 · 2987 阅读 · 1 评论 -
SSH-KeyGen 的用法
转自:http://blog.163.com/chen98_2006@126/blog/static/158584272007101862513886/假设 A 为客户机器,B为目标机;要达到的目的:A机器ssh登录B机器无需输入密码;加密方式选 rsa|dsa均可以,默认dsa做法:1、登录A机器 2、ssh-keygen -t [rsa|转载 2015-10-18 08:23:19 · 677 阅读 · 0 评论