<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Stand__out的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Stand__out</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Stand__out]]></copyright><item><title><![CDATA[进程组，作业，会话，精灵进程]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/52078406</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/52078406</guid><author>Stand__out</author><pubDate>Sun, 31 Jul 2016 18:06:52 +0800</pubDate><description><![CDATA[1. 进程组
每个进程除了有一个进程ID之外，还属于一个进程组。进程组是一个或多个进程的集合。通常，它们与同一作业相关联，可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是，其进程组ID等于其进程ID。
组长进程可以创建一个进程组，创建该组中的进程，然后终止。只要在某个进程组中一个进程存在，则该进程组就存在，这与其组长进程是否终止]]></description><category></category></item><item><title><![CDATA[死锁的产生和预防死锁]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/52058378</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/52058378</guid><author>Stand__out</author><pubDate>Thu, 28 Jul 2016 20:34:03 +0800</pubDate><description><![CDATA[1，死锁的定义：死锁是指多个进 程因竞争资源而造成的一种僵局（互相等待），若无外力作用，这些进程都将无法向前推进。
2，死锁产生的原因主要是：
（1） 因为系统资源不足。
（2） 进程运行推进的顺序不合适。
（3） 资源分配不当等。
3，死锁产生的必要条件：
（1） 互斥条件：一个资源每次只能被一个进程使用。
（2） 请求与保持条件：一个进程因请求资源而阻塞时，对已获得的资源保持不放]]></description><category></category></item><item><title><![CDATA[线程安全与可重入]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/52044765</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/52044765</guid><author>Stand__out</author><pubDate>Wed, 27 Jul 2016 16:34:28 +0800</pubDate><description><![CDATA[线程安全：一个函数被称为线程安全的当且仅当被多个并发线程反复调用时，它会一直产生正确的结果。
任何线程不安全问题的根源都是“共享数据”。所以，不使用任何共享数据的函数（即：可重入函数）肯定是线程安全的。但这并不等于说，线程安全函数就是可重入函数。为什么呢？因为即使有线程有共享数据，线程被并发调用的时候产生的结果可以是正确的。那么这种正确性是如何保证的呢？对，就是通过同步操作。

可重入：当被]]></description><category></category></item><item><title><![CDATA[阻塞信号和捕捉信号]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/52039704</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/52039704</guid><author>Stand__out</author><pubDate>Wed, 27 Jul 2016 00:10:59 +0800</pubDate><description><![CDATA[一 阻塞信号
1 概念：
信号递达：实际执行信号的处理动作称为信号递达(Delivery)。
信号未决：信号从产生到递达之间的状态,称为信号未决(Pending)。
进程可以选择阻塞(Block )某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。
注意：阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。
每个]]></description><category></category></item><item><title><![CDATA[Linux中的mmap函数]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/52021757</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/52021757</guid><author>Stand__out</author><pubDate>Mon, 25 Jul 2016 12:20:35 +0800</pubDate><description><![CDATA[1，mmap函数功能
mmap函数为内存映射函数。负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改，来实现对文件的读取和修改,而不需要再调用read，write等操作。


注意：mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上，如果文件的大小不是所有页的大小之和，最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。
2，mmap]]></description><category></category></item><item><title><![CDATA[进程调度算法]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51699961</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51699961</guid><author>Stand__out</author><pubDate>Fri, 17 Jun 2016 14:59:27 +0800</pubDate><description><![CDATA[一，进程调度的原因
无论是在批处理系统还是分时系统中，用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外，系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略，动态地把处理机分配给处于就绪队列中的某一个进程，以使之执行。
二，进程调度方式
1. 非抢占式优先权算法

在这种方式下，系统一旦把处理机分配给就绪队列中优先权最高的进程后，该进程便一直执行下去，直至完成；或]]></description><category></category></item><item><title><![CDATA[我的第一个Linux小程序（进度条）]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51569757</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51569757</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 20:04:06 +0800</pubDate><description><![CDATA[一，预备知识
 在写进度条之前，先要对printf函数有一个更深的理解与认识，看一个简单的程序：
（1）运行后先输出“hello world”，再睡眠三秒


（2）去掉\n以后，按照预期，应该先输出hello world，再睡眠3秒，可是结果却是睡眠3秒后再输出hello world，这是为什么呢？





其实呢printf函数是先把内容写到行缓冲区，遇到\n或者是行缓]]></description><category></category></item><item><title><![CDATA[make,makefile和程序的编译链接过程]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51565394</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51565394</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 12:00:18 +0800</pubDate><description><![CDATA[一，Linux下程序运行过程 
1，在一个目录下新建三个文件：main.c  hello.c  hello.h分别编写他们如下图： 
 
2，想要让这个程序执行起来，就必须对上面的三个文件分别进行编译链接执行，如下图： 
 
 
    通过上面这个过程。我们可以大致总结一下gcc编译器把目标文件经过预处理，编译，汇编，链接生成可执行文件的过程和命令： 
（1）预处理（宏替换，删除注释和多余的空白字]]></description><category></category></item><item><title><![CDATA[Centos中vim的配置]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564637</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564637</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:34 +0800</pubDate><description><![CDATA[一，vim简介    多模式编辑器，可视化操作不仅可以在终端运行，也可以运行于x window、 mac os、 windows。1、vim的基本概念　　基本上vim可以分为三种状态（其实有好多模式，目前掌握这3种即可），分别是命令模式、插入模式和底行模式，各模式的功能区分如下：1) 命令行模式command mode）　　控制屏幕光标的移动，字符、字或行的删除，移动复制某区段及进入Insert ]]></description><category></category></item><item><title><![CDATA[文件名查找指令find]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564635</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564635</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:31 +0800</pubDate><description><![CDATA[一，文件查找命令        在linux下有相当优异的查找命令。那怎么查找一个文件的存放路径呢？通常我们会用到下面这三个命令：    which  查看可执行文件的位置。    whereis  查看文件的位置。    locate  配合数据库查看文件位置。    find  实际搜寻硬盘查询文件名称。    通常我们先使用前面三个命令来进行查找，如果真的找不到。再使用find命令来查找。因]]></description><category></category></item><item><title><![CDATA[Linux基础（一）]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564634</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564634</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:28 +0800</pubDate><description><![CDATA[第一部分：计算机1，计算机硬件的五大单元：（1）输入单元：包括键盘，鼠标，扫描仪，手写板等。（2）中央处理器（CPU）：含有算术逻辑，控制，记忆等单元。（3）输出单元：显示器，打印机。2，计算机的处理过程：650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7F/FA/wKiom1czAPHhHTLdAAASWj65LCs555.pn]]></description><category></category></item><item><title><![CDATA[栈求解迷宫问题]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564633</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564633</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:25 +0800</pubDate><description><![CDATA[求迷宫从入口到出口的所有路径是一个经典的程序设计问题。一般的设计思想就是从入口出发，顺着某个方向向下探索，探索分为上下左右四个方位，哪个方向是通的就将向下走，如果每个方向都走不下去就进行原路“回退”。所以需要一个后进先出的结构来保存从入口到出口的路径。所以运用栈来实现是非常方便的，沿着某个方向走，将每个可通的位置进行入栈标记，再切换到下个位置；如果都不通，则栈顶出栈取消标记，再寻找。下来呢就实现一]]></description><category></category></item><item><title><![CDATA[智能指针和异常]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564632</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564632</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:22 +0800</pubDate><description><![CDATA[今天让我们来分析一下C++中的智能指针和异常，首先呢先普及一下概念！（1）智能指针：智能或者自动化的管理指针所会向的动态资源的释放。（2）异常：当一个函数发现自己无法处理的错误时，让函数的调用者直接或间接的处理这个问题。（3）RAII：资源分配即初始化。构造函数完成对象的初始化，析构函数完成对象的清理，而不是删除。在实际写代码过程中，我们很容易写出存在异常的代码，不信来看看下面几个例子 ：void]]></description><category></category></item><item><title><![CDATA[数组和指针再次来袭]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564630</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564630</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:19 +0800</pubDate><description><![CDATA[1，数组和指针的定义于声明：定义：只能出现一次，用来确定对象的类型和大小，并为其分配空间。声明：可以出现多次，描述对象的类型，用于指定其他地方定义的对象，不为对象分配空间。所以说extern char a[]与extern char a[10]等价，因为这是声明，不分配空间。看一个关于数组指针的例子：例1：#include
int main()
{
	char a[5] = { 'A', 'B',]]></description><category></category></item><item><title><![CDATA[数组和指针]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564628</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564628</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:16 +0800</pubDate><description><![CDATA[1，一维数组 先看一下一个整型数组关于数组名的表达式在内存中所占的字节数#include
#include
int main()
{
	int a[] = { 1, 2, 3, 4 };
	printf("%d\n", sizeof(a)); //  16  在sizeof中，数组名a不发生降级，代表整个数组
	printf("%d\n", sizeof(a+0)); //  4   在sizeo]]></description><category></category></item><item><title><![CDATA[模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564627</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564627</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:14 +0800</pubDate><description><![CDATA[1，模拟实现strstrstrstr为字符串查找函数，其原型为：char *strstr( const char *string, const char *strCharSet );这个函数就是在string中寻找是否含有子字符串strCharSet，寻找过程两个都不需要发生改变，所以将它们声明为const常量。返回值为char *这样可以方便链式访问。代码实现如下：#include
#inclu]]></description><category></category></item><item><title><![CDATA[模拟实现strstr]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564625</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564625</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:10 +0800</pubDate><description><![CDATA[模拟实现strstr:在系统库函数中，存在strstr函数，它用于查找子字符串。它的函数原型为：char *strstr( const char *string, const char *strCharSet );这个函数中是要从*string中查找*strCharSet子字符串。因为只是查找，这两个字符串都不用发生改变，所以将他们声明为常量字符串。模拟实现strstr：#include
#inc]]></description><category></category></item><item><title><![CDATA[模拟实现strncat]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564624</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564624</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:08 +0800</pubDate><description><![CDATA[模拟实现strncat:在系统库函数中，存在strncat这个函数，它用于字符串的追加，就是在一个字符串后面再追加一个字符串，它的函数原型为：char *strncat( char *strDest, const char *strSource, size_t count );在其中，*strDest为目标字符串，*strSource为源字符串,count为需要追加的字符串的个数，strncat就]]></description><category></category></item><item><title><![CDATA[判断一个字符串是否为另外一个字符串旋转之后的字符串。]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564623</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564623</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:05 +0800</pubDate><description><![CDATA[判断一个字符串是否为另外一个字符串旋转之后的字符串。例如：给定s1 ＝ AABCD和s2 = BCDAA，返回1，给定s1=abcd和s2=ACBD，返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABCAABCD右旋两个字符得到CDAAB方法（1）：用库函数实现,代码如下：#include
#include
#include
int ]]></description><category></category></item><item><title><![CDATA[实现一个函数，可以左旋字符串中的k个字符]]></title><link>https://blog.youkuaiyun.com/Stand__out/article/details/51564619</link><guid>https://blog.youkuaiyun.com/Stand__out/article/details/51564619</guid><author>Stand__out</author><pubDate>Thu, 02 Jun 2016 10:45:02 +0800</pubDate><description><![CDATA[实现一个函数，可以左旋字符串中的k个字符例如：AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA方法（1）：采用循环移位，对需要旋转的k个字符按顺序进行旋转，先将要旋转的一个字符保存起来，将后面的往前挪动一位，再将保存起来的这个字符赋给最后一位，这样连续循环k次，就可以完成了。代码实现如下：#include
#include
#include
void left_move(c]]></description><category></category></item></channel></rss>