<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ruleless的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ruleless</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ruleless]]></copyright><item><title><![CDATA[进程会话]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/46510015</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/46510015</guid><author>ruleless</author><pubDate>Mon, 15 Jun 2015 23:50:00 +0800</pubDate><description><![CDATA[Unix操作系统调度的基本单位是进程，单个或多个进程组成进程组，单个或多个进程组则组成会话。其关系示意图如下：




进程组




#include 

pid_t getpgrp(); // 返回调用进程的进程组ID
pid_t getpgid(pid_t pid); // 返回指定进程的进程组ID，若失败返回-1
int setpgid(pid_t pid, p]]></description><category></category></item><item><title><![CDATA[进程控制]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/46509971</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/46509971</guid><author>ruleless</author><pubDate>Mon, 15 Jun 2015 23:45:13 +0800</pubDate><description><![CDATA[进程控制函数

创建子进程






#include  

int fork(); // 子进程中返回0，在父进程中返回子进程ID，出错返回-1
int vfork(); // vfork与fork在语义上一致，但vfork不会复制父进程空间，用vfork创建的子进程以与父进程共享地址空间的方式运行；另外调用vfork后父进程将会阻塞，直到子进程调用exit或exec为]]></description><category></category></item><item><title><![CDATA[文件I/O]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/46509649</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/46509649</guid><author>ruleless</author><pubDate>Mon, 15 Jun 2015 23:32:41 +0800</pubDate><description><![CDATA[基本文件操作函数






#include 


int open(int filedes, int filestate, ...); // 失败返回-1， 成功返回文件描述符
int close(int filedes);
int lseek(int filedes, int offset, int fromwhere); // 随机访问文件，失败返回-1，成功返回文]]></description><category></category></item><item><title><![CDATA[进程概要]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/46279417</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/46279417</guid><author>ruleless</author><pubDate>Sat, 30 May 2015 22:53:30 +0800</pubDate><description><![CDATA[C程序内存布局








进程退出函数




void _exit(int status);
void _Exit(int status);
voit exit(int status);
void atexit(void (*func)());  // 注册进程退出时调用的函数]]></description><category></category></item><item><title><![CDATA[关于设计窗口定时器类的一点思考(2013-03-17)]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/8684784</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/8684784</guid><author>ruleless</author><pubDate>Sun, 17 Mar 2013 21:13:41 +0800</pubDate><description><![CDATA[问题是这样的，一个父窗口有很多子窗口，而这些子窗口都需要定时更新自身的数据。
    对于这个问题看上去最简单的一个办法就是为每一个窗口都创建一个定时器，然后分别处理，但这样做，代码量势必很大，而且当父窗口需要增加子窗口时对代码结构的影响必定会很大。所以，我没有采用这样的办法，很多表面上看起来很简单的东西也不必急着动手，仔细想想，说不定有更简单的方法。
    一个很朴素的想法是将定时器抽象成]]></description><category></category></item><item><title><![CDATA[分享一道关于素数的笔试题]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7979734</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7979734</guid><author>ruleless</author><pubDate>Fri, 14 Sep 2012 16:30:12 +0800</pubDate><description><![CDATA[题目：请写代码打印10000之内的素数，讲求效率！
    说实话，这年代如此这般简单的笔试题还真是不多见了，不过今天被我有幸遇到了！虽然我丝毫也高兴不起来，因为我知道笔试再好，面试那关也难过！不知道是不是点背的关系，每次面试总是感觉良好，事后却总无回音。我从自己身上找呀找呀找原因，找到很多。比如，有项目经验，却无大型项目开发经验，而且项目经验并非多得不得了。
    还有就是行业原因，比如，]]></description><category></category></item><item><title><![CDATA[通用散列表]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7961465</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7961465</guid><author>ruleless</author><pubDate>Sun, 09 Sep 2012 22:22:59 +0800</pubDate><description><![CDATA[用散列表存储数据在理论上能做到常量级的查询或插入时间复杂度。散列表中最核心的是求取哈希值。有集合R、有限整数集Z，将R映射到Z的函数称为散列函数。
    整数的散列函数可以为取模函数，因为整数域中的任何元素总可以通过取模操作被限制到一定范围内；
    字符串的散列函数有很多，不一一列举；
    结构体的散列函数则可以视结构体的具体结构而定。
    ......
    题为“通用]]></description><category></category></item><item><title><![CDATA[简单的回射程序]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7883693</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7883693</guid><author>ruleless</author><pubDate>Sun, 19 Aug 2012 18:22:55 +0800</pubDate><description><![CDATA[《UNIX网络编程》很多章节都用回射程序来作例子，因为该程序逻辑简单——客户端只管读终端，然后发送读取的字符串；服务器只管读取客户端发送来的字符串，然后回射回去。
    回射服务器代码：
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

ty]]></description><category></category></item><item><title><![CDATA[UNIX网络编程]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7883672</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7883672</guid><author>ruleless</author><pubDate>Sun, 19 Aug 2012 17:47:14 +0800</pubDate><description><![CDATA[《UNIX网络编程》确实是一本不可多得的好书，它之优势不仅在于其理论透彻，其编程实例也讲的很清晰。说来惭愧，在刚开始看UNIX编程三件套的时候，只觉得这三本书完全是POSIX API的参考手册。然而看下来才发现，里面不仅有深刻的计算机理论知识，而且通篇也渗透了各种编程技巧。说实话，如果吃透这三本书，编程水平一定能上一个台阶。
    《UNIX网络编程》不仅是我进行网络编程工作时的参考书，同时偶]]></description><category></category></item><item><title><![CDATA[双连通分量]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7877020</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7877020</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 13:36:35 +0800</pubDate><description><![CDATA[在无向连通图中，如果删除该图的任何一个结点都不能改变该图的连通性，则称该图是双连通的。双连通无向图一定是连通的，而连通的无向图则不一定是双连通的。对于一个连通的无向图也有双连通分量的概念，定义自然不言而喻。
    同样，我们也可以利用tarjan算法求双连通分量。
#define N 10000
struct Edge
{
    int to,next;
}e[100000];
int e]]></description><category></category></item><item><title><![CDATA[强连通分量]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7876971</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7876971</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 13:28:15 +0800</pubDate><description><![CDATA[对于有向图的一个顶点集，如果从这个顶点集的任何一点出发都可以到达该顶点集的其余各个顶点，那么该顶点集称为该有向图的一个强连通分量。有向连通图的全部顶点组成一个强连通分量。
    我们可以利用tarjan算法求强连通分量。
#define N 1000
struct Edge
{
    int to,next;
}e[100000];
int ec,pp[N],n;
int dfn[N],l]]></description><category></category></item><item><title><![CDATA[最大权匹配算法（km）]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7876643</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7876643</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 11:41:30 +0800</pubDate><description><![CDATA[二分图的最大权匹配就是求所有匹配中权值最大的匹配。
char str[105][105];
int node[105][105],w[105][105],n,lx[105],ly[105],link[105];
bool visx[105],visy[105];
bool Find(int a)
{
    visx[a]=true;
    int j;
    for(j=1;j<=n;j+]]></description><category></category></item><item><title><![CDATA[二分图匹配]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7876481</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7876481</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 11:28:34 +0800</pubDate><description><![CDATA[二分图匹配是可以转换为网络流求解的，但直接用匈牙利算法求解比转换为网络流求解更高效。
    关于二分图有很多公式，比如它与最小顶点覆盖的关系、与最小路径覆盖的关系等等。这里就不进一步讨论了。
#define N 1000
int n;//二分图左边节点数
int m;//二分图右边节点数
bool edge[N][N],vis[N];
int link[N];

bool Find(int]]></description><category></category></item><item><title><![CDATA[网络流]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7876056</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7876056</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 10:40:40 +0800</pubDate><description><![CDATA[如果只从网络流的定义来看，它能求解的问题似乎很少，但如果考虑到转换的思想，则很多看起来与网络流丝毫不沾边的问题也能用网络流来解，这也是为什么网络流在ACM比赛中被列为较难题的原因所在。
    我这里不打算讨论怎么对一个问题建立网络流模型，说句实在话，我也无从讨论这个。如果将适于用网络流解决的问题看成是一个集合，那么这个集合是趋于无穷的，如果按照某种规则对它们进行分类组成另外一个问题分类集，那么]]></description><category></category></item><item><title><![CDATA[最小生成树算法]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7875945</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7875945</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 10:00:21 +0800</pubDate><description><![CDATA[最小生成树算法我只知道两种：Prim和Kruscal。
    Prim算法跟Dijkstra算法一样，属于典型的贪心算法（即从局部最优解得到全局最优解）。
    下面是Prim算法用于以邻接矩阵保存的图的情况。
#define N 1000

int edge[N][N],closedge[N],n;
bool vis[N];
void prim(int s)
{
    int i,j]]></description><category></category></item><item><title><![CDATA[最短路径算法]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7875719</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7875719</guid><author>ruleless</author><pubDate>Fri, 17 Aug 2012 09:40:51 +0800</pubDate><description><![CDATA[先从最简单的入手！图用邻接矩阵保存，算法为Dijkstra单源最短路径算法。

#define N 1000
#define Inf 9999999
int edge[N][N],dist[N],n,vis[N];

void dij(int s)
{
    int i,j,k;
    
    for(i = 1; i <= n; i++)
        dist[i] = edge[]]></description><category></category></item><item><title><![CDATA[POSIX多线程基础]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7874983</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7874983</guid><author>ruleless</author><pubDate>Thu, 16 Aug 2012 21:09:29 +0800</pubDate><description><![CDATA[在我写多线程程序的时候总是遵循这样的顺序：初始化资源->开启线程；停止线程->将资源去初始化。
    包含头文件：

#include 
#include     全局定义：


sem_t         g_sem;
pthread_t     g_tid;
pthread_attr_t g_attr;
BOOL          g_thread_runflag;

void*]]></description><category></category></item><item><title><![CDATA[emacs配置文件——.emacs]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7789448</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7789448</guid><author>ruleless</author><pubDate>Thu, 26 Jul 2012 15:36:16 +0800</pubDate><description><![CDATA[在emcas启动后会首先加载.emacs文件，该文件在HOME目录下。对于linux而言，HOME目录就是你的用户目录，可以用"cd ~"命令进入该目录；而对于windows而言，HOME目录则需要你自己在环境变量选项中配置（我的电脑->属性->高级->环境变量）。
    有些人热爱emacs并为此去学lisp，只为将自己的emacs变得更好用。可能是功力不够的原因，我无法理解其动力。]]></description><category></category></item><item><title><![CDATA[lisp——遍历目录]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7788986</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7788986</guid><author>ruleless</author><pubDate>Thu, 26 Jul 2012 14:53:50 +0800</pubDate><description><![CDATA[lisp是一门强大的语言无可否认，但有时候lisp还是免不了很二，比如：遍历目录！
    不管是用C还是python想要遍历指定的目录都很简单，而且跨平台也很容易；但对于lisp如果你想遍历一个目录下的所有文件，情况则没那么简单。首先你得清楚路径名的概念，然后，对于不同的lisp实现你得编写不同的代码，最后，你还得考虑windows与linux或者其他操作系统在目录结构上的差异。总之，如果你一]]></description><category></category></item><item><title><![CDATA[队列]]></title><link>https://blog.youkuaiyun.com/ruleless/article/details/7788687</link><guid>https://blog.youkuaiyun.com/ruleless/article/details/7788687</guid><author>ruleless</author><pubDate>Thu, 26 Jul 2012 13:17:05 +0800</pubDate><description><![CDATA[头文件：

#ifndef __MYQUEUE_H__
#define __MYQUEUE_H__

#define ret_val_if_fail(p, val)\
  if (!(p)){printf("%s:%d error: "#p" failed.\n", __func__, __LINE__); return val;}

#define ret_if_fail(p)\
  if]]></description><category></category></item></channel></rss>