Archive for 一月, 2010

自己动手写Linux Shell(三) —— 支持IO重定向

1 Comment »

1.IO重定向功能分析

IO重定向也是Shell的基本功能之一,这篇文章比较全面地介绍了Linux Shell的IO重定向功能。总结一下,IO重定向的大致格式是这样:

cmd  [src | &]     (> | < | >> )      (& num|-)  | dst

貌似写得有点复杂(我不是故意的)。解释一下,整个重定向语句由三部分组成:

Read the rest of this entry »


自己动手写Linux Shell(二) —— 支持后台执行

2 Comments »

在写完一个最简单的命令解释器以后,我给自己的shell起了个名字——jdsh(JackalDire Shell)。

本来以为加入后台执行不是什么难事,但是认真想了一下要处理好一个字符‘&’不是一般的麻烦,各种问题接踵而至,于是决定先找点轻松的活干。

1.加入shell内建命令

Read the rest of this entry »


自己动手写Linux Shell(一) —— 简单的命令解释器

2 Comments »

Like The Wind — S.E.N.S

寒假在做Linux Kernel Project这本书上的习题,第二章的练习是写一个简单的shell,看了一下要求觉得这个练习很有价值,涉及到很多Linux C Programming的知识,所以准备认真地做一下。

    最终的目标如下:

  1. 命令解释执行
  2. 支持后台执行(&)
  3. 支持输入输出重定向(< , >, >>)
  4. 支持管道IPC
  5. 内建命令cd, pwd, exit等

可见写一个shell并不是一件简单的事,从简单的一步一步做起吧,手头有APUE,一边做一边查。

Read the rest of this entry »


[消遣]Love Functions

2 Comments »

Version 1 (ZZ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
result love(boy, girl) 
{ 
    if ( boy.有房() and boy.有车() ) { 
        boy.set(nothing); 
        return girl.嫁给(boy); 
    } else if (girl.愿意等()) { 
        while( ! (boy.赚钱 > 1e6 and girl.感情 > 8 )) { 
            for (day=1; day <=365; day++) { 
                if ( day == 情人节 ) 
                    if ( boy.givegirl(玫瑰) ) girl.感情++; 
                    else girl.感情--; 
                if( day == girl.生日) 
                    if ( boy.givegirl(玫瑰) ) 
                        girl.感情++; 
                else girl.感情--; 
                boy.拼命赚钱();
                if( girl.耐心 == 0 && girl.有其它追求者) { 
                    girl.goto(nother_boy); 
                    boy.郁闷中(); 
                    boy.天天到BYR灌水(); 
                    return 没有结果; 
                } 
            } 
        }
        try 
        { 
            girl.要男友买房(); 
            girl.要男友买车(); 
            girl.每天逛专卖店(); 
            if ( boy.有房() && boy.有车() ) { 
                girl.去澳洲旅游(boy); 
                girl.到英国威斯敏斯结婚(boy); 
                girl.嫁给(boy); 
                boy.没日没夜挣钱(); 
            } 
        } catch() { 
            girl.byebye(boy); 
            boy.郁闷中(); 
            boy.天天到天涯灌水(); 
            return girl.broadcast("这个男人真小气"); 
        } 
        return girl.每天逛专卖店(); 
    } 
    return girl.goto(another_boy); 
}

Read the rest of this entry »


[C++]一个由C-Style类型转换引发的血案

3 Comments »

没事搜了一下自己域名,无意间发现老早提交的open directory申请居然通过了…想到一个多月没写东西,大惭…

为了尽快阻止这个连续N天没有日志的记录,先找一篇凑数…

先上开胃小菜 Appetizer

有人在byr论坛C++版上问了这样一道C++面试题:

class A {
    public: void fun()    {    }
};
 
class B: public A {
    public: virtual void fun() {    }
};
 
class C: public B {
    public: void fun(){}
};
 
class D: virtual public A {
public:
    void fun(){}
};
 
int main(void)  {
    void *p;
    ((A*)NULL)->fun();
    ((C*)NULL)->fun(); // why fault here?
    ((D*)NULL)->fun();
    return 0;
}

为什么在((C*)NULL)->fun()这句挂了呢?

Read the rest of this entry »