
Unix
Unix探索之旅
这个作者很懒,什么都没留下…
展开
-
Linux内核源码分析方法
一、内核源码之我见Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更转载 2018-01-15 09:24:39 · 380 阅读 · 0 评论 -
setsockopt()用法详解
#include <sys/types.h>#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen); sockfd:标识一个套接口的描述字。 level:选项定义的层次;支持SOL_SOCKET、I...原创 2018-02-28 17:13:14 · 2810 阅读 · 0 评论 -
shell 正则表达式详细整理
正则表达式的分类1、基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs)2、扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs)3、Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs)具体的可以参考这篇文章:htt...转载 2018-03-01 10:19:46 · 6520 阅读 · 0 评论 -
进程调度算法
调度算法是指:根据系统的资源分配策略所规定的资源分配算法。1. 先来先服务 1. 先来先服务调度算法。先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度, 也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业, 而不利于I/O繁忙型的作业(进程)。2. 短进程优先调度算法 ...原创 2018-03-03 15:43:21 · 251 阅读 · 0 评论 -
Unix下C程序内存泄漏检测工具Valgrind安装与使用
Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软...转载 2018-03-05 09:35:21 · 176 阅读 · 0 评论 -
服务器端开发经验总结 Linux C语言
简介在进行服务器端开发的时候需要考虑一些算法和性能问题,经过了几年的开发,对这方面有了一些经验,现在写下来跟大家分享和讨论。我主要是在Linux下进行C语言的开发,所以后面的实现都是基于Linux操作系统并用C语言来讲解。其它平台和语言需要考虑的问题是类似的只不过可能是实现细节上有一些差异,我尽量减少这些差异吧。注意一下讲解的所有内容都是基于32位系统的开发!服务器程序开发核心是稳定,在稳定的前提...转载 2018-03-05 09:51:14 · 657 阅读 · 0 评论 -
线程取消(pthread_cancel)讲解
基本概念pthread_cancel调用并不等待线程终止,它只提出请求。线程在取消请求(pthread_cancel)发出后会继续运行,直到到达某个取消点(CancellationPoint)。取消点是线程检查是否被取消并按照请求进行动作的一个位置.与线程取消相关的pthread函数int pthread_cancel(pthread_t thread)发送终止信号给thread线程,如果成功则返...转载 2018-03-06 17:03:45 · 1226 阅读 · 0 评论 -
Makefile概述与基本语法(一)
跟我一起写 Makefile 陈皓概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make...转载 2018-05-07 15:29:53 · 379 阅读 · 0 评论 -
Makefile 总述(二)
一、Makefile里有什么?Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。3、变量...转载 2018-05-07 15:31:41 · 279 阅读 · 1 评论 -
Makefile书写命令(三)
每条规则中的命令和操作系统Shell的命令行是一致的。make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令。我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin/sh”——UNIX的标准Shell...转载 2018-05-07 15:50:03 · 218 阅读 · 0 评论 -
Makefile使用变量(四)
在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:”、“...转载 2018-05-07 16:16:36 · 261 阅读 · 0 评论 -
Makefile使用函数(五)
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $(<function> <arguments>)或是 ${<function>...转载 2018-05-07 16:45:35 · 246 阅读 · 0 评论 -
Makefile 的运行(六)
一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。一、make的退出码make命令执行后有三个退出码: 0 —— 表示成功执行。 1 —— 如果ma...转载 2018-05-07 16:54:22 · 27224 阅读 · 0 评论 -
Unix环境高级编程(第三版) 源代码编译
下载代码:http://www.apuebook.com/code3e.html解压缩源代码文件:tar -zxvf src.3e.tar.gz安装依赖库:sudo apt-get install libbsd-dev 进入下载目录make复制头文件和动态链接库[plain] view plaincosudo cp ./include/apue.h /usr/include/ sudo cp ....原创 2018-03-07 10:55:56 · 824 阅读 · 0 评论 -
git使用小结
很多人可能和我一样,起初对git是一无所知的。我也是因为一次偶然的机会接触到git,并被它强大的功能所蛰伏。git其实就是一种版本控制工具,就像svn一样,但是git是分布式的。我不想给git打广告,我们直入正题——git能帮我们做什么?1)源码版本控制。平常写一写demo程序可能和git打不上交道,但是当我们把程序写到10000行以上,一般一个人开发的话要持续一个多月。期间程序作者可能会保存转载 2018-01-15 09:25:39 · 164 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O用户空间与内核空间现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。转载 2018-02-01 17:21:28 · 196 阅读 · 0 评论 -
Linux环境进程间通信(一)管道
1、 管道概述及相关API应用1.1 管道相关的关键概念管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自转载 2018-01-29 17:11:05 · 138 阅读 · 0 评论 -
Linux环境进程间通信(二) 信号(上)
一、信号及信号来源信号本质信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本转载 2018-01-29 17:12:06 · 169 阅读 · 0 评论 -
Linux环境进程间通信(二) 信号(下)
一、信号生命周期从信号发送到信号处理函数的执行完毕对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:信号"诞生"。信号的诞生指的是触发信转载 2018-01-29 17:15:03 · 229 阅读 · 0 评论 -
Linux环境进程间通信(三) 消息队列
消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求接受信号的进程在某个时间范围内对信号做出反应,因此该信号最多在接受信号进程的生命周期内才有意义,信号所传递的信息是接近于随转载 2018-01-29 17:15:59 · 162 阅读 · 0 评论 -
Linux环境进程间通信(四) 信号灯
一、信号灯概述信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号灯有以下两种类型:二值信号灯:最简单的信号灯形式,信号灯的值只能取0或1,类似于互斥锁。 注:二值信号灯能够实现互斥锁的功能,但两者的关注内容不同。信号灯强调共享资源,只要共享...转载 2018-01-29 17:16:58 · 214 阅读 · 0 评论 -
Linux环境进程间通信(五) 共享内存(上)
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,转载 2018-01-29 17:17:50 · 184 阅读 · 0 评论 -
Linux环境进程间通信(五) 共享内存(下)
系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件(这是通过shmid_kernel结构联系起来的),后面还将阐述。1、系统V共享内存原理进程间需要共享的数据被放在一个叫做IPC共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地转载 2018-01-29 17:20:46 · 218 阅读 · 0 评论 -
Linux 环境进程间通信(六) 套接字
一个套接口可以看作是进程间通信的端点(endpoint),每个套接口的名字都是唯一的(唯一的含义是不言而喻的),其他进程可以发现、连接并且与之通信。通信域用来说明套接口通信的协议,不同的通信域有不同的通信协议以及套接口的地址结构等等,因此,创建一个套接口时,要指明它的通信域。比较常见的是unix域套接口(采用套接口机制实现单机内的进程间通信)及网际通信域。1、背景知识linux目前的网络内转载 2018-01-29 17:22:02 · 219 阅读 · 0 评论 -
《UNIX网络编程 卷1》编译环境配置
本文针对《网络编程 卷1》unp.h 头文件及其编译问题进行记录,本书源码下载地址 http://www.unpbook.com 首先进行编译,在目录 unpv13e下依次执行以下步骤:[cpp] view plain copy ./configure cd lib make cd ../libfree make cd ../libroute...原创 2018-03-07 10:30:45 · 198 阅读 · 0 评论 -
《UNIX网络编程 卷2》编译环境搭建
1. 下载源码 W. Richard Stevens的主页:http://www.kohala.com/start/ 下载unpv22e.tar.gz到 /usr/local/src 目录unpv22e.tar.gz可以到Linux公社资源站下载:------------------------------------------分割线-------------------------...原创 2018-03-07 10:34:39 · 485 阅读 · 0 评论 -
Makefile 隐含规则(七)
在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的Makefile中没有书写这样的规则...转载 2018-05-07 17:08:16 · 185 阅读 · 0 评论