上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 24 下一页

2018年2月24日

信号

摘要: 一、什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。 信号是UNIX和Linux系统响应某些条件而产 阅读全文

posted @ 2018-02-24 09:10 AlanTu 阅读(360) 评论(0) 推荐(0) 编辑

设置用户ID和设置组ID

摘要: 与一个进程关联的ID有6个或更多,如下图所示: 与每个进程相关联的用户ID和组ID 实际用户ID 实际组ID 有效用户ID 有效组ID 附加组ID 保存的设置用户ID 保存的设置组ID 实际用户ID和实际组ID标识我们究竟是谁,这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话间这些值并 阅读全文

posted @ 2018-02-24 08:59 AlanTu 阅读(698) 评论(0) 推荐(0) 编辑

dup和dup2函数

摘要: 下面两个函数都可用来复制一个现存的文件描述符: #include<unistd.h> int dup(int filedes); int dup2(int filedes,int filedes2); 两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1 由dup返回的新文件描述符一定是当前 阅读全文

posted @ 2018-02-24 08:58 AlanTu 阅读(522) 评论(0) 推荐(0) 编辑

Linux进程学习 - 孤儿进程和守护进程

摘要: 孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程。现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 i 阅读全文

posted @ 2018-02-24 08:55 AlanTu 阅读(429) 评论(0) 推荐(0) 编辑

linux可重入、异步信号安全和线程安全

摘要: 一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断。它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程正在执行的正常指令序列(这和当一个硬件中断发生是所发生的事情相似。) 阅读全文

posted @ 2018-02-24 08:53 AlanTu 阅读(1546) 评论(0) 推荐(0) 编辑

标准I/O库

摘要: 前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解。以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事。Unix I/O也叫低级I/O,也叫Unbuffered I/O,是操作系统内核部分, 阅读全文

posted @ 2018-02-24 08:52 AlanTu 阅读(427) 评论(0) 推荐(0) 编辑

2018年2月23日

浅析I/O模型

摘要: 以下是本文的目录大纲: 一.什么是同步?什么是异步? 二.什么是阻塞?什么是非阻塞? 三.什么是阻塞IO?什么是非阻塞IO? 四.什么是同步IO?什么是异步IO? 五.五种IO模型 六.两种高性能IO设计模式 一.什么是同步?什么是异步? 同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有 阅读全文

posted @ 2018-02-23 16:30 AlanTu 阅读(161) 评论(0) 推荐(0) 编辑

I/O复用 - 各种不同的IO模型

摘要: 一、概述 我们看到上面的TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题就是在客户阻塞于(标准输入上的)fgets调用期间,服务器进程会被杀死。服务器TCP虽然正确地给客户TCP发送一个FIN,但是既然客户进程阻塞于从标准输入读入的过程,它将看不到这个ROF,知道从套接字读时为止( 阅读全文

posted @ 2018-02-23 16:27 AlanTu 阅读(281) 评论(0) 推荐(0) 编辑

Linux查看端口使用状态、关闭端口方法

摘要: 【摘要】 今天在编写socket,在期间遇到查看某个端口的状态,随后从网上找了一下,现在总结一下。 【内容】 大家都知道,端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。下次若某个进程再次开启,则相应的端口也再次开启。而不要纯粹的理解为关闭 阅读全文

posted @ 2018-02-23 16:26 AlanTu 阅读(88996) 评论(0) 推荐(0) 编辑

epoll讲解

摘要: 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数 阅读全文

posted @ 2018-02-23 16:25 AlanTu 阅读(278) 评论(0) 推荐(0) 编辑

Linux守护进程详解(init.d和xinetd)

摘要: 一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他 阅读全文

posted @ 2018-02-23 16:24 AlanTu 阅读(2894) 评论(0) 推荐(0) 编辑

linux下的僵尸进程处理SIGCHLD信号

摘要: 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。 而 阅读全文

posted @ 2018-02-23 16:21 AlanTu 阅读(489) 评论(0) 推荐(0) 编辑

传输层:TCP UDP SCTP

摘要: 总图 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员。图2-1展示了这些协议的概况。 图2-1中同时展示了IPV4和IPV6。从右向左看该图,最右边的5个网络应用在使用IPV6,随后的6个网络应用使用IPV4。 最左边名为tcpdump的网络应用或者使用BSD 阅读全文

posted @ 2018-02-23 16:17 AlanTu 阅读(683) 评论(0) 推荐(0) 编辑

Linux下Fork与Exec使用

摘要: 一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又 阅读全文

posted @ 2018-02-23 16:16 AlanTu 阅读(4613) 评论(0) 推荐(1) 编辑

TCP客户/服务器简单Socket程序

摘要: 建立一个 TCP 连接时会发生下述情形: 1. 服务器必须准备好接受外来的连接。这通常通过调用 socket、bind 和 listen 这三个函数来完成,我们称之为被动打开。 2. 客户通过调用 connect 发起主动打开,这导致客户TCP发送一个SYN(同步)分节,标识希望连接的服务器端口以及 阅读全文

posted @ 2018-02-23 16:14 AlanTu 阅读(657) 评论(0) 推荐(0) 编辑

地址已经被使用 - Address already in use

摘要: 很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。正如下面的这段简单的socket程序。 server.c #include 阅读全文

posted @ 2018-02-23 16:13 AlanTu 阅读(8704) 评论(0) 推荐(0) 编辑

Linux内存点滴 - 用户进程内存空间

摘要: 经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, S 阅读全文

posted @ 2018-02-23 16:03 AlanTu 阅读(376) 评论(0) 推荐(0) 编辑

Linux内存使用方法详细解析

摘要: 我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上 阅读全文

posted @ 2018-02-23 16:02 AlanTu 阅读(1415) 评论(0) 推荐(0) 编辑

直接管理内存

摘要: C++语言定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。 相对于智能指针,使用这来年刚给运算符管理内存非常容易出错,随着我们逐步详细介绍这两个四月份,这一点会更为清楚。而且,自己直接管理内存的类与使用智能指针的类不同,它们不能依赖类对象拷贝、赋值和销毁 阅读全文

posted @ 2018-02-23 15:55 AlanTu 阅读(130) 评论(0) 推荐(0) 编辑

动态内存和智能指针

摘要: 由编译器自动分配的内存都有着严格的生存期。全局对象在程序启动时分配,在程序结束时销毁。对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。 除了自动和static对象外,C++还支持动态分配对象。动态分配的对象的生存期与它 阅读全文

posted @ 2018-02-23 15:54 AlanTu 阅读(351) 评论(0) 推荐(0) 编辑

图说设计模式

摘要: 详见:http://design-patterns.readthedocs.io/zh_CN/latest/index.html 软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上,在软件生存 阅读全文

posted @ 2018-02-23 15:51 AlanTu 阅读(1204) 评论(0) 推荐(0) 编辑

设计模式概述

摘要: 1. 设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如 阅读全文

posted @ 2018-02-23 15:45 AlanTu 阅读(696) 评论(0) 推荐(0) 编辑

Facade - 外观模式

摘要: 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的 阅读全文

posted @ 2018-02-23 15:44 AlanTu 阅读(153) 评论(0) 推荐(0) 编辑

Adapter - 适配器模式

摘要: 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。 例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器 阅读全文

posted @ 2018-02-23 15:43 AlanTu 阅读(325) 评论(0) 推荐(0) 编辑

Bridge - 桥接模式

摘要: 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具 阅读全文

posted @ 2018-02-23 15:40 AlanTu 阅读(304) 评论(0) 推荐(0) 编辑

Factory - 工厂模式

摘要: 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之 阅读全文

posted @ 2018-02-23 15:38 AlanTu 阅读(229) 评论(0) 推荐(0) 编辑

Singleton - 单例模式和Double-Checked Locking - 双重检查锁定模式

摘要: 问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再dele 阅读全文

posted @ 2018-02-23 15:32 AlanTu 阅读(219) 评论(0) 推荐(0) 编辑

Decorator - 装饰模式

摘要: 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性。如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上。 通过继承一个现有类可以使得子类在拥有自身方法的同时还 阅读全文

posted @ 2018-02-23 15:32 AlanTu 阅读(217) 评论(0) 推荐(0) 编辑

Template Method - 模板方法模式

摘要: 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序。但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关。例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务->对银行工作 阅读全文

posted @ 2018-02-23 15:31 AlanTu 阅读(589) 评论(0) 推荐(0) 编辑

设计模式 - 观察者模式

摘要: 提纲 问题的产生 观察者模式主要内容,定义 模式UML结构 使用场景 用户自定义观察者模式通用模式代码(java) 模式分类(推模型和拉模型) 模式实现(推模型) 模式实现(拉模型) 推拉两种模式的比较 优缺点 模式总结 JAVA提供的对观察者模式的支持 怎样使用JAVA对观察者模式的支持 Ruby 阅读全文

posted @ 2018-02-23 15:28 AlanTu 阅读(278) 评论(0) 推荐(0) 编辑

寻找最小的k个数

摘要: 1 使用从大到小的优先队列保存最小的K个数,每次取出K个数之后的其余数和堆顶元素比较,如果比堆顶元素小,则将堆顶元素删除,将该元素插入 2 使用set的排序功能,以从大到小的顺序排序所有前K个元素,取出其余的元素与第一个元素比较,如果小于第一个元素,则将第一个元素删除,将当前元素插入。 3 使用pa 阅读全文

posted @ 2018-02-23 15:21 AlanTu 阅读(278) 评论(0) 推荐(0) 编辑

Trie树 - 字典树

摘要: 1.1、什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。 Trie的核心思想是空间换时间,利用字符串的公共前缀来降 阅读全文

posted @ 2018-02-23 15:18 AlanTu 阅读(173) 评论(0) 推荐(0) 编辑

谈谈动态规划的思想

摘要: 动态规划( dynamic programming )算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些 阅读全文

posted @ 2018-02-23 15:16 AlanTu 阅读(10748) 评论(0) 推荐(0) 编辑

贪心算法 - 0/1背包问题

摘要: 1、问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ∋ ∑ wi 阅读全文

posted @ 2018-02-23 15:14 AlanTu 阅读(14069) 评论(2) 推荐(0) 编辑

动态规划 - 活动选择问题

摘要: 一个递归解 设c[i][j]为Sij中最大兼容子集中的活动数目,当Sij为空集时,c[i][j]=0;当Sij非空时,若ak在Sij的最大兼容子集中被使用,则则问题Sik和Skj的最大兼容子集也被使用,故可得到c[i][j] = c[i][k]+c[k][j]+1。 当i≥j时,Sij必定为空集,否 阅读全文

posted @ 2018-02-23 15:12 AlanTu 阅读(545) 评论(0) 推荐(0) 编辑

贪心算法 - 活动选择问题

摘要: 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分别采用动态规划方法和贪心算法进行分析。本篇笔记给出活动选择问题的详细分析过程,并给出详细的实现代码进行测 阅读全文

posted @ 2018-02-23 15:11 AlanTu 阅读(442) 评论(0) 推荐(0) 编辑

动态规划 - 最优二叉搜索树

摘要: 二叉查找树 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lg 阅读全文

posted @ 2018-02-23 15:05 AlanTu 阅读(25143) 评论(0) 推荐(1) 编辑

动态规划 - 最长公共子序列

摘要: 1、基本概念 一个给定序列的子序列就是该给定序列中去掉零个或者多个元素的序列。形式化来讲就是:给定一个序列X={x1,x2,……,xm},另外一个序列Z={z1、z2、……,zk},如果存在X的一个严格递增小标序列<i1,i2……,ik>,使得对所有j=1,2,……k,有xij = zj,则Z是X的 阅读全文

posted @ 2018-02-23 15:03 AlanTu 阅读(865) 评论(0) 推荐(0) 编辑

动态规划 - 矩阵链乘法

摘要: 前言:今天接着学习动态规划算法,学习如何用动态规划来分析解决矩阵链乘问题。首先回顾一下矩阵乘法运算法,并给出C++语言实现过程。然后采用动态规划算法分析矩阵链乘问题并给出C语言实现过程。 1、矩阵乘法 从定义可以看出:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×r的矩阵A左乘一个r 阅读全文

posted @ 2018-02-23 15:00 AlanTu 阅读(842) 评论(0) 推荐(0) 编辑

动态规划 - 钢条切割

摘要: 前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法思想。本书在第二章介绍归并排序时,详细介绍了分治算法的 阅读全文

posted @ 2018-02-23 14:58 AlanTu 阅读(602) 评论(0) 推荐(0) 编辑

上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 24 下一页

导航