
linuxC编程
文章平均质量分 63
igaozh
这个作者很懒,什么都没留下…
展开
-
Linux程序设计中由线程使用不当引起的内存泄漏
Linux程序设计中,创建线程时调用pthread_create()函数,该函数原型如下:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);其中第二个参数attr为线程属性指针,一般情况下,我们创建线程时,若对...原创 2012-12-13 10:27:00 · 2353 阅读 · 0 评论 -
EPOLL ET 模式下事件触发的场景
ET模式称为边缘触发模式,顾名思义,不到边缘情况,是死都不会触发的。EPOLLOUT事件:EPOLLOUT事件只有在连接时触发一次,表示可写,其他时候想要触发,那你要先准备好下面条件:1.某次write,写满了发送缓冲区,返回错误码为EAGAIN。2.对端读取了一些数据,又重新可写了,此时会触发EPOLLOUT。简单地说:EPOLLOUT事件只有在不可写到可写的转变时刻,才会触发一次,所...原创 2012-09-25 10:13:29 · 192 阅读 · 0 评论 -
惊群问题的思考
“据说”惊群问题已经是一个很古老的问题了,并且在大多数系统中已经得到有效解决,但对我来说,仍旧是一个比较新的概念,因此有必要记录一下。什么是惊群 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉,等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。对于操作系统来说,多个进程...原创 2012-09-25 10:13:15 · 94 阅读 · 0 评论 -
linux惊群问题之udp
今天测试udp服务器进程时发现log中记录了当进程收到一个请求后,会有多条失败处理记录,同时有一条成功处理记录。服务器进程使用sellect模式,通过fork四个子进程来监听同一个socket。 发现问题后初步怀疑是出现了惊群现象。但是,听说现代内核已经解决了惊群问题,程序也可以确定也没有问题,就奇怪问题发生在哪里了。 后来在网上一搜才知道,原来lin...原创 2012-09-25 10:12:08 · 235 阅读 · 0 评论 -
线程属性pthread_attr_t简介
本文编辑整理自: http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.htmlhttp://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part1/ Posix线程中的线程属性pthread_attr_t主要包括scope属性、d...原创 2013-01-05 10:57:28 · 272 阅读 · 0 评论 -
Berkeley DB 由浅入深【转自架构师杨建】
在网上看到不少介绍Berkeley DB的文章,几乎所有的中文文章都是介绍完入门就再也没了。大都是个概括。最近做这个,所以想系统的由浅入深的介绍一下。不清楚的地方可以和我讨论,或参照官方网站sleepycat上的文档。我用的是最新版本 db-4.4.16.NC.tar.gz,这个包中含有详细的英文文档。为什么要使用Berkeley DB,它适合什么场合应用?Berkeley DB...原创 2012-09-19 15:00:41 · 186 阅读 · 0 评论 -
linux 多线程编程
进程与线程 进程是程序执行时的一个实例,是执行程序在一定数据集上运行的过程,是LINUX系统分配资源的基本单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程进程是资源管理的最小...原创 2012-09-19 15:00:16 · 92 阅读 · 0 评论 -
Linux的mmap文件内存映射机制
在讲述文件映射的概念时, 不可避免的要牵涉到虚存(SVR 4的VM). 实际上, 文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施, 好似用户将文件映射到自己地址空间的某个部分, 使用简单的内存访问指令读写文件;另一方面, 它也可以用于内核的基本组织模式, 在这种模式种, 内核将整个地址空间视为诸如文件之类的一组不同对象的映射. 中的传统文件访问方式是, 首先用ope...原创 2012-09-19 15:00:00 · 92 阅读 · 0 评论 -
getaddrinfo()函数详解
1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个addrinfo的结...原创 2012-09-19 10:59:19 · 95 阅读 · 0 评论 -
linux下创建守护进程(daemon process)代码
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/param.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl....原创 2012-09-18 13:47:41 · 114 阅读 · 0 评论 -
dup and dup2的剖析
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置。请注意区分...原创 2012-09-18 13:35:04 · 60 阅读 · 0 评论 -
C语言系统资源控制(getrlimit && setrlimit)
每一个进程都有自己的一组资源限制,在(*)inux系统中我们可以通过#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(int resource, const struct rlimit *rlim);这2个API来取得和设置资源getrlimit用来取得s...原创 2012-09-18 11:52:18 · 107 阅读 · 0 评论 -
UNIX缓冲机制
某日一朋友写了一个HELLO WORLD代码,出不来结果,代码如下:#include <stdio.h>int main(int argc, char **argv){ printf("hello world!"); _Exit(0);} 注意到,在代码中printf语句打印的字符串最后没有带换行符,而且最...原创 2012-09-18 11:11:00 · 147 阅读 · 0 评论 -
避免内存碎片
许多书籍提到过内存碎片,也看到一些方法防治内存碎片。一直以来都以为频繁的分配释放内存会导致系统内存碎片过多(虽然这个想法并没有错到离谱)。后来看过计算机程序设计艺术上面关于伙伴系统的介绍,一般操作系统都采用此种方法来管理内存。频繁分配释放内存确实会导致一些系统负担,但分配的内存释放及时,内存管理系统将能够急时合并相邻空闲内存块,得到更大的空闲内存。这样并不会导致内存碎片的出...原创 2012-12-13 10:49:49 · 188 阅读 · 0 评论 -
pthread_cond_wait()
/************pthread_cond_wait()的使用方法**********/ pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock); pthread_mutex_unlock(&qlock);/*****************...原创 2012-09-25 10:13:42 · 66 阅读 · 0 评论