Linux
文章平均质量分 77
wanghaobo920
这个作者很懒,什么都没留下…
展开
-
代码的坏味道
代码坏味道:是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。1. 重复的代码如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。同一个class内的两个函数中含有重复的代码段两个兄弟class的成员函数中含有重复的代码段两个毫不相关的class内出现转载 2013-09-21 19:14:45 · 947 阅读 · 0 评论 -
网络socket编程指南
eej网络socket编程指南 -------------------------------------------------------------------------------- 介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知转载 2013-06-30 12:46:52 · 795 阅读 · 0 评论 -
网络编程中参数的获得与设置
取得本地主机名: int gethostname(char *hostname, size_t size); 获得主机名存到hostname中。 取得本地的信息: int getsockname(int sockfd, struct sockaddr *addr, int *addrlen); addr存有返回的主机信息。 示例:转载 2013-06-30 12:35:59 · 741 阅读 · 0 评论 -
系统设计之 网络模型(二)
本章主要列举服务器程序的各种网络模型,示例程序以及性能对比后面再写。一、分类依据。服务器的网络模型分类主要依据以下几点(1)是否阻塞方式处理请求,是否多路复用,使用哪种多路复用函数(2)是否多线程,多线程间如何组织(3)是否多进程,多进程的切入点一般都是accept函数前二、分类。首先根据是否多路复用分为三大类:(1)阻塞式模型(2)多路复用模型(3)实时信号模型转载 2013-06-30 12:33:43 · 713 阅读 · 0 评论 -
Linux进程间通信(一)---进程间通信概述及其种类
为什么会有进程间通信? 我们应该都知道了,进程是一个程序的一次执行,是系统资源分配的最小单元。这里所说的进程一般是指运行在用户态的进程,而由于处于用户态的不同进程间是彼此隔离的,但是它们很可能需要相互发送一些信息,好让对方知道自己的进度等情况,像这样进程间传递信息就叫进程间通信。进程间通信方式有几种? 就像处于不同城市的人之间的通信方式有手机、电脑等方式一样,进程间通转载 2013-06-30 16:14:31 · 561 阅读 · 0 评论 -
Linux中TCP连接过程状态简介
一、Linux服务器上11种网络连接状态: 图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一转载 2013-06-24 21:30:22 · 697 阅读 · 0 评论 -
epoll原理及应用详解
由于尊重原著所以贴上链接,请大家点击查看:http://www.cnblogs.com/debian/archive/2012/02/16/2354454.html epoll_create函数实现源码分析http://blog.csdn.net/lmh12506/article/details/7556188Linux 2.6内核中提高网络I/O性能的新方法ep转载 2013-01-13 13:33:05 · 625 阅读 · 0 评论 -
libev源码分析libev数据结构整理
这里选取的版本为最新版:libev-4.04。libev的代码很简练,除了对高效I/O模型等的封装文件,核心文件就两个:ev.h和ev.c,其中ev.c大概4000行左右。代码大量用到了宏,并且宏还嵌套了宏,为了便于理解libev的代码,这里对宏进行了还原。ev_watcher结构体(其成员为其它结构的公共部分):typedef struct ev_watcher {int a转载 2013-01-13 15:27:03 · 2612 阅读 · 0 评论 -
libevent和libev
构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方 案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力。在本文中,我们要讨论在 UNIX® 应用程序中使用和部署这些解决方案所用的基本结构和方法。libev 和 libevent 都可以在高性能应用程序中使用,包括部署在 IBM C转载 2013-01-13 15:24:21 · 3636 阅读 · 0 评论 -
几种经典的网络服务器架构模型的分析与比较
事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代转载 2013-01-13 12:17:59 · 950 阅读 · 0 评论 -
一个Linux下C线程池的实现
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。pool_in转载 2013-01-12 14:25:18 · 362 阅读 · 0 评论 -
linux下C语言使用线程池(附带编码)
本人也是学习,希望多多指正使用一个东西,我们要明白为什么使用它,如何使用它,使用它能达到什么效果在写本文章时,我也借鉴了网上的部分资源,因为是之前很早搜索到的资料无法追踪源头,所以在此不再写来源,谨感谢各位大神。1 使用线程池的原因通常使用多线程都是在需要的时候创建一个新的线程,然后执行任务,完成后退出。一般情况下是完全够满足我们的程序的。但是当我们需要创建大量的线程,并且执行转载 2012-12-02 22:19:26 · 442 阅读 · 0 评论 -
通过linux的shell脚本批量创建用户名,用户名所属目录,设置对应密码
###在Suse11 运行验证过,没有问题===================shell start===========================#!/bin/shusrname=(username1 username2 username3 username4)ii=0maxuser=4while (($ii douseradd ${usrname[i转载 2012-12-02 21:30:04 · 2430 阅读 · 0 评论 -
linux下定时器的实现(select+线程)
更好的计时器类实现:LINUX RTC机制实现计时器类很多时候需要在LINUX下用到定时器,但像setitimer()和alarm()这样的定时器有时会和sleep()函数发生冲突,这样就给编程带来了很大的困难。写了一个定时器的类,使用select进行精确定时。而且可以在系统中创建不限数量的定时器,且互不干扰。类的内部采用线程实现。即线程+select。代码如下:CTimer.h:转载 2012-12-02 21:29:28 · 803 阅读 · 0 评论 -
linux下epoll如何实现高效处理百万句柄的[转]
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?先简单回顾下如何使用C库封装的3个epoll系统调用吧。转载 2012-11-25 13:22:45 · 1114 阅读 · 0 评论 -
浅谈时间函数gettimeofday的成本
http://blog.csdn.net/russell_tao/article/details/7185588 我们在程序中会频繁地取当前时间,例如处理一个http请求时,两次调用gettimeofday取差值计算出处理该请求消耗了多少秒。这样的调用无处不在,所以我们有必要详细了解下,gettimeofday这个函数做了些什么?内核1ms一次的时钟中断处理真的可以支持tv_usec字段达转载 2012-11-25 13:24:58 · 684 阅读 · 0 评论 -
内 存 编 程
1. 内存分配方式1.1 内存分配的几种方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。(2) 在栈上创建。在执行函数时,函数的参数值,内局部变量的存储单元都可以在栈上创建。函数执行结束时转载 2013-06-30 12:50:24 · 777 阅读 · 0 评论 -
Linux多任务编程(一)---任务、进程、线程
Linux下多任务介绍 首先,先简单的介绍一下什么叫多任务系统?任务、进程、线程分别是什么?它们之间的区别是什么?,从而可以宏观的了解一下这三者,然后再针对每一个仔细的讲解。 什么叫多任务系统?多任务系统指可以同一时间内运行多个应用程序,每个应用程序被称作一个任务。 任务定义:任务是一个逻辑概念,指由一个软件完成的任务,或者是一系列共同达到某一目的的操作。转载 2013-06-30 16:01:30 · 612 阅读 · 0 评论 -
Linux多任务编程(四)---exit()函数及其基础实验
exit()和_exit()函数函数说明 创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示: 从图1可以看出,_exi转载 2013-06-30 16:04:14 · 584 阅读 · 0 评论 -
Linux的多任务编程-线程
1.线程的基本概念Linux操作系统很早就具备这些多进程功能了.但有时人们认为用fork()来创建一个新进程的代价还是太大,如在Web服务器中,通常采取的多进程方案是一旦接收到访问请求后,即创建一个新的进程,由该进程执行任务,当任务执行完毕后,该进程退出.如果有大量的请求在很短的时间中频繁的访问该服务器,那么服务器耗费在创建进程,销毁进程中的机时便十分可观.如果能用线程来完成这个工作,则情转载 2013-09-21 18:02:07 · 979 阅读 · 0 评论 -
Linux的多任务编程-进程
Linux的多任务编程-进程进程的概念进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,它是系统进行资源分配和调度的基本单元.一次任务的运行可以并发激活多个进程,这些进程相互合作来完成该任务的一个最终目标.进程的特性:并发性,动态性,交互性,独立性,异步性. 进程的种类:交互式进程,批处理进程,实时进程.进程和程序是有本质区别的:程序是静态的一段转载 2013-09-21 18:01:10 · 2637 阅读 · 0 评论 -
深入浅出进程与线程的基本概念
http://blog.csdn.net/ce123_zhouwei/article/details/8933251深入浅出进程与线程的基本概念进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,转载 2013-09-21 17:52:41 · 953 阅读 · 0 评论 -
Linux 的多线程编程的高效开发经验
转自:http://www.chineselinuxuniversity.net/articles/22615.shtml本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。背景Linux 平台上的多转载 2013-08-11 18:32:25 · 572 阅读 · 0 评论 -
Linux多任务编程(二)---fork()函数及其基础实验
fork()函数 在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。函数说明 fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函转载 2013-06-30 16:03:23 · 647 阅读 · 0 评论 -
Linux多任务编程(七)---Linux守护进程及其基础实验
守护进程概述 守护进程,又叫daemon进程(不知怎的,我突然想起来吸血鬼日记中的达蒙了,很好看的美剧),是Linux中的后台服务进程。他是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。Linux有很多系统哦服务,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如,转载 2013-06-30 12:57:15 · 601 阅读 · 0 评论 -
关于同步、异步,阻塞、非阻塞的解释
在windows socket api 下:异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据转载 2013-06-30 12:47:52 · 1143 阅读 · 0 评论 -
系统设计之 网络模型(一)基础篇
全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下:socket-->bind-->listen-->[accept-->read-->write-->close]-->close[]中代码循环运行,[]外的是对监听socket的处理,[]内的是对acce转载 2013-06-30 12:33:04 · 704 阅读 · 0 评论 -
Linux程序设计入门 - fork, pthread, and signals
在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫。 fork()及在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫。 fork()及signal经常运用在daemon守护神这一类常驻程序,另外像 a4c.tty/yact/chdrv这些中文终端机程序也有用到,一般如转载 2013-06-30 12:31:38 · 922 阅读 · 0 评论 -
Linux多任务编程(六)---编写多进程程序及其代码
实验目的 通过编写多进程程序,熟练掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。实验内容 该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s后异常退出。父进程先用阻塞方式等待第一个进程的结束,然后用非阻塞方式等待另一转载 2013-06-30 16:13:26 · 1671 阅读 · 1 评论 -
Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
wait()和waitpid()函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若转载 2013-06-30 16:08:50 · 1023 阅读 · 0 评论 -
Linux多任务编程(三)---exec函数族及其基础实验
exec函数族函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执转载 2013-06-30 16:03:59 · 605 阅读 · 0 评论 -
Select()系统调用及文件描述符集fd_set的应用
在网络程序中,一个进程同时处理多个文件描述符是很常见的情况。select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select()就返回。select()的调用形式为:#include #include int select(转载 2013-06-30 12:40:18 · 552 阅读 · 0 评论 -
unix 多进程下的生产者和消费者实现
#include#include#include#include#include #include#include#include #includetypedef struct{ int buf[129]; int occupied; int nextin; int nextout;转载 2013-06-30 12:37:11 · 716 阅读 · 0 评论 -
系统设计之 网络模型(三)多路复用模型
多路复用的方式是真正实用的服务器程序,非多路复用的网络程序只能作为学习或着陪测的角色。本文说下个人接触过的多路复用函数: select/poll/epoll/port。kqueue的*nix系统没接触过,估计熟悉了上面四种,kqueue也只是需要熟悉一下而已。一、select模型select原型:int select(int n, fd_set *readfds, fd_set *转载 2013-06-30 12:34:40 · 703 阅读 · 0 评论 -
Linux进程间通信(二)---管道通信之无名管道及其基础实验
管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包括两种:无名管道和有名管道。这一节主要讲无名管道,首先介绍一下这两个管道。(特点很重要啊!)1、无名管道 无名管道是Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点: ① 它转载 2013-06-30 16:16:38 · 778 阅读 · 0 评论 -
TFTP源代码
最近在研究计算机网络,TFTP协议,简单文件传输协议,是基于UDP协议的。协议本身非常简单,很像停止等待协议,即服务器发一次数据,然后等待客户端应答,然后继续发,继续应答...TFTP主要有两种模式,netascii和octet,数据每次传512字节,报文编码从1开始,打算把TFTP协议改造一下,加入些自己的东西,用于自己的程序,参考了下别人的源码,如下/*******************转载 2012-11-08 21:50:52 · 750 阅读 · 0 评论 -
LINUX下解析配置文件(配合上篇使用)
LINUX下解析配置文件配置文件在Linux下使用得非常普遍。形如下面的这个文件就是一个典型的配置文件:# this is just an example# there can be comments before the first group[First Group]Name=Key File Exampletthis value showsnescaping#转载 2012-09-25 22:38:17 · 488 阅读 · 0 评论 -
Linux 下串口编程入门
串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个 25转载 2012-09-16 18:13:17 · 434 阅读 · 0 评论 -
GCC生成的汇编代码
假设我们写了一个C代码文件 code.c包含下面代码:int accum = 0;int sum(int x, int y){int t = x + y;accum += t;return t;}这是用echo命令输入源码的效果,简单的就是最好的:)一、查看GCC生成的汇编代码在命令行上用“-S”选项,就能转载 2012-09-16 18:42:21 · 401 阅读 · 0 评论 -
Linux设备驱动程序之阻塞/非阻塞IO----等待对列
十一过后..小王也刚好即将大学毕业,现在要开始写简历,投简历,找工作了。到了家工作单位,小王欣喜若狂,可再一看,心都凉了半截..“咋了,小王,看你找工作,我都来了帮你大气,怕什么,不就人多点吗..”看着排到电梯口的长龙,我说(其实,我心里也害怕,可也不能说出来不是)。“不是,你不知道,我并不怕面试上有问题,有你在,技术上还是问题吗,不相信自己还不相信你啊,我主要是怕连面试的机会都没转载 2012-09-16 18:14:20 · 635 阅读 · 0 评论