08 2012 档案

信号处理
摘要:1 linux系统中对信号的处理主要由signal和sigaction函数来完成 Signal函数用来设置进程在接收到信号时的动作 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum,sighandler_t handler); signal会根据参数signum指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,最必须是常数SIG_IGN(忽略该信号)或者SIG_DFL(对该信号 阅读全文

posted @ 2012-08-28 11:17 好坏 阅读(430) 评论(0) 推荐(0)

线程控制
摘要:1线程的优点:统一进程下的线程共享同一进程空间,所以节约资源,主要包括以下三面:创建块、系统调度线程间切换快、通信快2 创建线程: #include <pthread.h> int pthread_create(pthread_t *thread, pthread_attr_t *attr, void* (*start_routine)(void *),void *arg); 参数说明: thread : 该参数是一个指针,当线程创建成功时,用来返回创建的线程ID attr:该参数用于指定线程的属性,NULL表示使用默认属性 start_routine:该参数为一个函数指针,指向线 阅读全文

posted @ 2012-08-28 11:16 好坏 阅读(782) 评论(0) 推荐(0)

进程控制
摘要:1 程标识函数:定义在unistd.h中 pid(id) 获得进程ID pid_t getppid(id) 获得进程父进程的ID pid_t getuid() 获得进程的实际用户ID pid_t geteuid() 获得进程的有效用户ID pid_t getgid() 获得进程的实际组ID pid_t getegid(id) 获得进程的有效组ID进程控制1) fork: 用户创建一个新进程(创建一个新进程的唯一方法)#include <sys/types.h>#include <unist得到的 d.h>pid_t fork(void);注意:fork函数非常特殊,它有 阅读全文

posted @ 2012-08-28 11:15 好坏 阅读(276) 评论(0) 推荐(0)

求数组中连续子数组的最大和
摘要:问题: 求解数组中连续一段子数组和的最大值。例如:{31,-41,59,26,-53,58,97,-93,-23,84},最大值为59+26-53+58+97=187思路: 计算出任意i到j之间连续子数组的和再比较必然能得到最大值,但时间复杂度为O(n^2),我们希望能找出线性时间的算法。 我们注意到,假如数组中全为正数,那么最大和必然为全部数相加;如果数组中有负数,并且如果加上某个负数,子数组的和小于0,则最大和子数组必然不包含这个负数。 基于此,给出以下代码: //计算数组中任何连续子数组的最大和#include <stdio.h>int getMaxValue(int dat 阅读全文

posted @ 2012-08-20 21:13 好坏 阅读(3876) 评论(3) 推荐(0)

在GridView中添加按钮后,如何触发按钮的各种事件?
摘要:1.在GridView的“编辑列”属性窗口中,增加新的Botton列。2.然后再该窗口右边属性中,将外观项下的ButtonType设置一下,设置项有:如:Link、Button、Image。3.属性设置完成后,在右边属性列表窗口的下方有这样一行超链接蓝字:“将此字段转换为TemplateField”,单击这个超链接,把该列插入进来的字段转换为模版。//添加了一个删除控件,并将其转换为模版后的代码,该控件还和在GridView所在行的主键进行绑定,把主键作为参数带到该控件的各个事件函数中。<asp:TemplateField ShowHeader="False" Hea 阅读全文

posted @ 2012-08-10 21:36 好坏 阅读(15069) 评论(1) 推荐(1)

GridView的模版列中加入按钮,触发按钮事件后,如何获取该行的某个值?
摘要:<asp:TemplateField><ItemTemplate><asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="Button"/></ItemTemplate></asp:TemplateField>=============================================protectedvoidButton1_Click(objectsender,Ev 阅读全文

posted @ 2012-08-10 21:35 好坏 阅读(4243) 评论(0) 推荐(0)

简单工厂模式、工厂方法模式和抽象工厂模式的区别
摘要:工厂模式是最重要的模式,因为大多数模式都需要用到工厂模式。如果不能正确的运用工厂模式,那么可以说无法成为合格的架构师。 多数设计模式的内容讲解的都是如何设计接口。接口如何产生呢?如果在客户代码(类库的使用者称之为客户)中直接使用具体类,那么就失去了接口的意义。因为接口的使用目的,就是要降低客户对具体类的依赖程度。如果在客户代码中直接使用接口,那么就造成了客户对具体类名称的依赖。(客户最终需要以某种方式指明所需要的具体类,如配置文件或代码,但是只需要指出一次,所以说降低对具体类的依赖程度)。要使客户代码不依赖具体类,唯一的方法,就是让客户代码不依赖具体类的部分不知道具体类的名称。知道具... 阅读全文

posted @ 2012-08-10 21:29 好坏 阅读(7737) 评论(0) 推荐(6)

浅析设计模式系列之三--工厂方法模式
摘要:基本简介 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去.. 阅读全文

posted @ 2012-08-10 21:28 好坏 阅读(585) 评论(0) 推荐(0)

浅析设计模式系列之二——简单工厂模式
摘要:基本简介 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。意图:提供一个类,由它负责根据一定的条件创建某一具体类的实例。该模式中包含的角色及其职责 1) 工厂(Creator)角色 简单工厂模式的核心,它负责实现创... 阅读全文

posted @ 2012-08-10 21:20 好坏 阅读(307) 评论(0) 推荐(0)

浅析设计模式系列之一 ——综述
摘要:什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。设计模式的基础是面向对象编程.面向对象的编程思想通过封装、继承、多态把程序的耦合度降低,使程序更加灵活,容易修改,易于复用。设计模式的种类GoF的《设计模式》是第一次将设计模式提升到理论高度,并将之规范化。它提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的 阅读全文

posted @ 2012-08-10 21:11 好坏 阅读(356) 评论(0) 推荐(0)

递归算法的时间复杂度分析
摘要:在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法:(1)代入法(Substitution Method)代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理。(2)迭代法(Iteration Method)迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。(3)套用公式法(Master Method)这个方法针对形如“T(n) = aT(n... 阅读全文

posted @ 2012-08-10 21:10 好坏 阅读(6263) 评论(0) 推荐(0)

字符串的循环移位
摘要:问题描述: 将一个字符串a像左旋转i个位置。例如,当n=8且i=3时(n为字符串有效长度),向量abcdefgh旋转为defghabc。要求时间复杂度O(n),空间复杂度为O(1)问题求解: 直接将前i个数组复制到一个临时数组,将余下的元素左移,再将临时数组中的i个元素复制到末尾的方法可得正确解,但空间复杂度为O(n)。每次移动一个到末尾,剩余的前移也能得正确解,但时间复杂度为O(n^2)。显然,我们需要新的想法。 解法一: 移动a[0]到临时变量t,然后移动a[i]到a[0],a[2i]到x[i],依次类推(将a中所有下标对n取模),直至返回到取x[0]中的元素,此时改为从t取... 阅读全文

posted @ 2012-08-10 20:47 好坏 阅读(8131) 评论(1) 推荐(0)

实现自己的ls
摘要:使用过linux的人最早接触的命令应该就是ls了,本文将带领大家应用前几篇文章讲述的操作文件和目录的系统调用,实现自己的ls指令。 函数流程: 1.获取该目录下文件的总数和最长文件名长度 2.获取该目录下所有文件的文件名,存放于变量中 3.按名字字母顺序排序,排序后文件按字母顺序存储于filenames中 4.根据参数的不同,调用display_dir()显示目录下所有文件,或调用display()显示单个文件#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <f 阅读全文

posted @ 2012-08-09 20:48 好坏 阅读(1604) 评论(0) 推荐(0)

linux文件与目录操作
摘要:1.stat 获取文件属性 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *filename,struct stat *buf); int fstat(fd, struct stat *buf); int lstat(const char *filename, struct stat *buf); fstat与stat的区别是fstat通过文件描述符指定文件;lstat与stat的区别在于,对于符号连接文件,lstat返回的是符号链接文 阅读全文

posted @ 2012-08-06 20:14 好坏 阅读(2237) 评论(0) 推荐(1)

文件IO(3)
摘要:今天继续学习文件I/O,主要介绍dup/dup2、sync/fsync/fdatasync、fcntl、ioctl等系统调用。1.dup和dup2函数1) 函数原型: #include <unistd.h> int dup(int filedes); int dup2(int fildes.int filedes2);2) 函数功能: 两个函数都用来复制一个现存的文件描述符。dup返回的新的文件描述符一定是当前可用文件描述符中的最小值。dup2则可以用filedes2参数指定新描述符的数值。如果filedes2已经打开,则先将其关闭,如果filedes等于filedes2,则dup 阅读全文

posted @ 2012-08-05 15:57 好坏 阅读(504) 评论(0) 推荐(1)

文件IO(2)--read、write和lseek
摘要:昨天我们学习了open和creat函数,今天我们继续学习write、read和lseek函数,他们均定义在<unistd.h>。1. read函数1) 函数原型: #include <unistd.h> ssize_t read(int fd, void *buf, size_t count);2) 函数功能: read系统调用从文件描述符fd指向的文件中,读取count个字节到buf中。3) 参数说明: fd:文件描述符 buf:保存读入信息的缓存 count:要读取的字节数 返回值:如果read成功,则返回读到的字节数,如果已达到结尾,则返回0,出错 返回-... 阅读全文

posted @ 2012-08-03 17:02 好坏 阅读(10365) 评论(0) 推荐(0)

文件IO(1)--creat和open
摘要:今天开始学习unix/linux系统下的文件I/O函数—打开文件、读文件、写文件等。大多数文件I/O只需要用到5个函数:open,read,write,lseek已经close,这5个函数都直接调用同名的系统调用,所以是不带缓冲的,本节,主要介绍open和creat函数。1.open函数1)函数原型:#include <fcntl.h>int open(const char* pathname,int flags)int open(const char* pathname,int flags,mode_t mode);2)函数功能:打开或建立一个文件。对于open函数,仅当创建文件 阅读全文

posted @ 2012-08-02 15:55 好坏 阅读(8687) 评论(0) 推荐(0)

导航