2011年11月2日

apue.h的编译设置:http://www.cnblogs.com/moiyer/archive/2009/11/19/1952702.html http://topic.csdn.net/u/20070423/11/1a20307c-4f46-4911-8122-0576698082f8.html 不错的截图工具 http://forum.ubuntu.org.cn/viewtopic.php?t=91685 apue note:http://blog.csdn.net/intrepyd/article/details/4508770#comments
posted @ 2011-11-02 09:31 chuwei 阅读(262) | 评论 (1)编辑 收藏

2011年9月20日

转自:http://www.cnblogs.com/swpattern/archive/2010/05/11/1732352.html

笔者觉得这3个new有点意思,有时候我也被搞懵了,这些创造者难不成觉得C++过于简单,所以搞一点含糊的术语出来。这次总结一下,以便再懵的时候有个参考。有错的地方请不吝赐教,多谢先!

简单点吧:

1. new operator,即熟悉的new操作符,用它从堆中分配一个对象,并且初始化。CHeapObject* p=new CHeapObject(name);

既然是操作符,那么它的行为就和其他+-*/操作符一样,是由C++语言定义的,不能改变,即使通过重载的方式也不能改变。C++规定了new操作符的行为:分配一个合适的空间容纳CHeapObject对象,然后调用其构造函数初始化对象。

2. operator new,就是new操作,1种说的“分配一个合适的空间容纳CHeapObject对象”就是通过new操作完成的。全局的new操作是如下声明的:

void * operator new(size_t size);

这是一个函数声明,在C++里我们可以通过重载该函数改变这个函数的行为,即分配空间的方式,相信大家都干过这事。

补充一下,虽然operator new是给new operator调用的,但是也可以被你调用,如:

void* p=operator new(sizeof(CHeapObject));

它只分配空间,等同于C里的malloc()。

虽然我们重载了operator new,但是我们没有改变1中new operator的行为。

3. placement new

唉,我又懵了:-)

这是在已经分配好的空间上(比如malloc, operatornew,返回的void*,没有对象信息),调用CHeapObject的对象构造函数,这也是一个特殊的new操作。上例子吧:

void* buffer=operator new(100*sizeof(CHeapObject));///分配100个对象的空间

CHeapObject* construct(void* buf, string objname)

{

  return new(buf) CHeapObject(objname);

}

这个函数返回对象指针,对象是在传递进来的buffer上分配。这个new的用法是new操作符的另一个用法,需要一个额外的变量buf,new操作的隐含调用operator new的时候会把buf传递给它,这是operator new的定义如下:

void * operator new(size_t, void *buffer)

{

  return buffer;

}

这就是placement new。

最后来个总结吧:

如果想在堆上创建一个对象,应该用new操作符,它分配内存,同时又为对象调用构造函数。

如果仅仅想分配内存,就用operator new函数,它不会调用构造函数。

如果你想定制自己的在堆对象被建立时的内存分配过程,应该重载写你自己的operator new函数,new操作符会调用你定制的operator new。

如果想在一块已经分配好的内存里建立一个对象,使用placement new。


posted @ 2011-09-20 13:12 chuwei 阅读(232) | 评论 (0)编辑 收藏

2011年8月8日

来自:http://www.blogjava.net/zhyiwww/archive/2009/10/27/299957.html
在用wget抓取数据的时候,有的时候需要用户登录才能进行。这种情况下就需要时用cookie.
先看下面的代码:
 
wget --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies -O output/login.html --post-data "username=NNNNNNNNNNN&password=MMMMMMMMMMM" http://www.xxxxxxxxxxxxxx.org/login
 
  wget --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies -O output/directory-list.html "http://www.xxxxxxxxxxxxxxx.org/list?category=resturants&page=1"
 
第一个操作,就是先获得一个cookie,用来登陆并保存此session,然后在后面的抓数据的过程中使用此session和cookie.
注意:
http://www.xxxxxxxxxxxxxx.org/login要换成对应的登陆页面的url
--post-data "username=NNNNNNNNNNN&password=MMMMMMMMMMM"  post数据里面的参数要根据登陆页面里面对应的参数设定。

第二个操作,就是用上面的cookie去验证用户,并取得一个有效的连接,进而去取得数据。
--load-cookies 就是载入你上一个操作所取得的cookie.

在抓取数据的时候,我自己用了一个脚本,如下,以供参考:

get --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies -O login.html --post-data "username=xxxxxxxxxx&password=11111111111111111" http://www.mmmmmmmmmmmmmmmmmm.mmmmmmmmm/login
 
 
 
  for i in {1..89}
  do
      for j in {1..20}
      do
          echo i=$i -- j=$j
 
  echo "wget --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies  -O $i-$j.html 'http://www.ccccccccccccccc.ccccccccccc/directory/resturant/list?keyword=&class=$i&page=$j'"
 
  wget --no-dns-cache --no-cache --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies  -O $i-$j.html "http://www.qqqqqqqqq.xxxxxxxxx/directory/bar/list?keyword=&class=$i&page=$j"
 
      done
posted @ 2011-08-08 22:31 chuwei 阅读(858) | 评论 (0)编辑 收藏

2011年7月22日

之前装Ubuntu时,可以直接用shutdown,init 0等命令。
这次用虚拟机装centos,发现一些命令用不了,上网搜了下,原来是环境变量没有设置好。
查阅了些资料,大概了解了如何设置环境变量。

一、Linux的变量种类

按变量的生存周期来划分,Linux变量可分为两类:

1. 永久的:需要修改配置文件,变量永久生效。

2. 临时的:使用export命令行声明即可,变量在关闭shell时失效。

二、设置变量的三种方法

1. 在/etc/profile文件中添加变量【对所有用户生效(永久的)】

用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

例如:编辑/etc/profile文件,添加CLASSPATH变量

# vi /etc/profile

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

2. 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

例如:编辑guok用户目录(/home/guok)下的.bash_profile

$ vi /home/guok/.bash.profile

添加如下内容:

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

3. 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
三、另外

1.使用readonly命令设置只读变量,如果使用了readonly命令的话,变量就不可以被修改或清除了。

2.使用unset命令来清除环境变量 $ unset TEMP_KEVIN #删除环境变量TEMP_KEVIN



posted @ 2011-07-22 15:44 chuwei 阅读(509) | 评论 (0)编辑 收藏
普通模式:
左下右上:hjkl
w前进一个单字
b后退一个单字
ctrl+u向上翻半页
ctrl+d向下翻半页
ctrl+f向上翻一页
ctrl+b向下翻一页
H文本第一行
M文本中间行
L文本最后行
^光标移动到当前行第一个字符(非空白字符)
$光标移动到当前行最后一个字符
0光标移动到当前行第一个字符(包括所有字符)
G光标移动到最后一行
nG光标移动到第n行
n+Enter向下移动n行
~改变光标处字符大小写
guu整行字符变小写
gUU整行字符变大写
guw,gUw,gub,gUb
ddp 交换上下行

gg=G 格式化所有代码
gg到行首
==格式化当前行

/word向下查找word
?word向上查找word
n下一个
N上一个

x为删除当前字符
nx删除连续向后n个字符
dd删除当前行内容
dG删除光标到最后一行
d0删除光标到行首内容
d$删除光标到行末内容
ndd删除光标向下n行内容
dnG删除光标到第n行内容

y复制(yank)
yy复制当前行内容
yG复制当前行到最后一行内容
y0复制光标到行首内容
y$复制光标到行末内容
nyy复制光标向下n行内容
ynG复制光标到第n行数据

p粘贴到下一行
P粘贴到上一行
c修改(change)
>缩进
<反缩进

.重复上一次操作
u undo
ctrl+r  redo

末行模式:
set cindent shiftwidth=4设定普通模式下>》移动为8个字符
n1,n2s/word1/word2/g 在n1到n2行查找word1,并替换成word2
n2改为$就是最后一行
g改为gc则需要用户确认
忽略大小写
set ingorecase   or  /searchword\c
查找统计个数
:%s/searchword//gn

全选:
gg行首,v转为可视模式(visual mode)
G最后一行前一个光标,然后要$选中剩余的行

普通模式->插入模式
a光标前,A行首
i光标后,I行末
o下一行,O上一行
posted @ 2011-07-22 10:19 chuwei 阅读(379) | 评论 (0)编辑 收藏
1.uname
显示系统信息
option:
-a 所有信息
-s 系统名
-n 网络节点名称
-r 内核发行版本
-v 操作系统版本
-p 系统处理器的体系结构
缺省为-s

2.cd
更改工作目录
cd -返回上一次的工作目录
cd .当前目录
cd ..父目录

3.pwd
打印当前工作目录

4.history
查看当前用户命令历史
后可加| head -n  tail -n more等命令

5.ls
列出目录下的文件
-a 所有文件
-l 长格式显示
-t 按时间排序
-r 反序
-d 目录文件

6.mkdir
创建目录
-p为多级目录

7.du
统计目录和文件占用内存的情况
-a 全部文件,包括隐参文件
-h 以K M单位显示信息,默认是以块(block)为单位
-s 统计所有文件总和

8.rmdir
删除空目录

9.rm
删除文件
-r 递归删除
-f 强制删除
-i 需要用户确认,为缺省参数
\加在命令前,可去掉缺省参数,如\rm, -i参数就会去掉

10.cp [option] src des
-r 递归持续复制,用于目录的复制行为;
-f 强制复制,若有重复或其它疑问时,不会询问使用者,而强制复制
-p 保留原来的权限属性
13.mv src des
移动文件,可用来更改文件名(在同一目录下)

10.cat
查看文件内容

11.touch
新建文件,也可以更改文件创建时间

12.file
查看文件类型

13.which
查找命令文件位置,是通过$PATH的值寻找。
-a 列出所有结果

14.find
查找文件位置
find 查找目录路径 -name 文件名

15.tar
解压,压缩
-c 创建打包文件
-x 解打包,解压缩
-j 通过bzip2的支持进行压缩/解压缩
-z 通过gzip的支持进行压缩/解压缩
-f filename 要被处理的文件名,-f和filename必须连在一起
-v 显示正在处理的文件名
posted @ 2011-07-22 10:15 chuwei 阅读(222) | 评论 (0)编辑 收藏
仅列出标题  

导航

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜