入门Linux确实比上手Windows要不容易。这段时间已经深刻体会。今天Linux程序设计里的一句话有误导了半天,幸好什么有位高手——小胖哈哈!
这里只是简单的介绍下管道和重定向,因为在接下来的shell编程中会深入了解,到时候在详细总结。
管道连接着一个命令的标准输出和另外一个命令的标准输入。在linux下管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动地进行协调。形象的讲:管道就相当于自来水管,而进程或者(程序)相当于水龙头,管道里的水相当于数据,水可以在不同的水龙头间依次流动。
例如:..#ps -aux | sort
其中的ps可以看作是“水龙头1”,‘|’看作是“水管”, sort看作是“水龙头2”,ps -aux运行的结果看作是“水”
重定向对标准输入输出进行重定向。将“水”从一处运往另外一处。
例如:ls -a > lsoutput.txt
将程序ls的标准输出流重定向到文本文件中。也就是说,‘>’的左端必须有输出流。例子中ls -a输出的结果本来是显示在屏幕上的,但是经过重定向将其输出到了文件中。
书中的一个例子:
cat lsoutput.txt | sort | uniq | > output.txt
这样最终得到的output.txt是一个空文件。 为什么?因为最后一个‘|’后面没有跟“水龙头”,怎么可能把“水”从“管子”里放出来,运到另外一个地方呢?
解决方法至少有两种:
cat lsoutput.txt | sort | uniq | tee> output.txt
或者
cat lsoutput.txt | sort | uniq > output.txt
通过形象的比喻,以上两种方式都能很少的理解!!
Monthly Archive for 一月, 2008
"placement new"? 它到底是什么东东呀?我也是最近几天才听说,看来对于C++我还差很远呀!placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。
它的原型如下: void *operator new( size_t, void *p ) throw() { return p; }
首先我们区分下几个容易混淆的关键词:new、operator new、placement new new和delete操作符我们应该都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new,而不是new和delete。
看如下代码: class MyClass {…}; MyClass * p=new MyClass;
这里的new实际上是执行如下3个过程:
1. ADSL拨号上网:
上http://www.roaringpenguin.com/products/pppoe下载rp-pppoe客户端软件,它是使用GNU License的,所以我们可以放心的使用。
(1) 下载源码,解压,到rp-pppoe-3.8子文件夹,打开终端,运行脚本 :
..#./go
将自动进行编译和安装,最后,自动调用 pppoe-setup 进行配置,具体解释见下面。
(2) 配置PPPOE客户端软件
安装完软件包后,必须配置pppoe的配置文件/etc/ppp/pppoe.conf,从而让ADSL拨号时使用配置文件中的用户名、密码等参数。我们不必手工改动这个文件,可以使用pppoe-setup这个命令进行配置:
..#pppoe-setup
当出现
>>> Enter your PPPoE user name : (如 HFK01010101)
输入ADSL帐号的用户名
当出现
>>> Enter the Ethernet interface connected to the ADSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where ‘n’ is a number.
(default eth0):
输入 eth0 ,这是ADSL相连的网卡的名字。
当出现
>>> Enter the demand value (default no):
输入 no
当出现
>>> Enter [...]