msmtp配置
2014年10月06日 21:54
http://www.docin.com/p-471069369.html
Happy coding
#include <iostream>
using namespace std;
class A
{
int a;
virtual void f();
};
class B
{
int b;
virtual void f();
virtual void g();
};
class C:public A,public B
{
int c;
virtual void h();
};
class D:virtual public A
{
int d;
virtual void k();
};
class E:public A
{
int e;
virtual void k();
};
int main()
{
cout << sizeof(A)
<< " "
<< sizeof(B)
<< " "
<< sizeof(C)
<< " "
<< sizeof(D)
<< " "
<< sizeof(E)
<< endl;
return 0;
}
运行结果:8 8 20 16 12
可见g++对虚拟继承采用的是Pointer Strategy所产生的数据布局,如果采用Virtual Table Offset Strategy所产生的数据布局将会是8 8 20 12 12(详见《深度探索C++对象模型》P121-123)。
#include <stdio.h>
int a = 1;
int &b = a; // 正确
--------------------------------------
int &c = 1; // 错误
const int &c = 1; // 正确
--------------------------------------
int& max(int &a, int &b) {return a>b?a:b;}
max(1,2); // 竟然编译正确?--->是不正确的(已解决),调用了库函数的max,将其改为imax试试
--------------------------------------
另外,如果要将函数形参全部声明为const引用,注意函数返回类型若为引用,则定为const
const int& max(const int &a, const int &b) {return a>b?a:b;}
int& max(const int &a, const int &b) {return a>b?a:b;} // 错误
--------------------------------------
int a = 1;
int &b = a; // 无temp产生
--------------------------------------
int a = 1;
const int &b = a; // 无temp产生
--------------------------------------
const int a = 1;
const int &b = a; // 无temp产生
--------------------------------------
double d = 3.14;
int &b = d; // 错误
--------------------------------------
double d =3.14;
const int &b = d; // 产生temp,b绑定在temp临时对象上,并非对象d上
--------------------------------------
const int &i = 1; //产生temp,i绑定在temp临时对象上
可达到此目的的有一下几个命令:
1.which-命令的位置,在变量环境PATH中查找
which -a command_name, -a列出所有指令,不加-a只列第一个找到的命令
2.whereis-搜索特定文件
-b,只找binary文件; -m,只找说明文件; -s,只找source来源文件; -u,没有说明档的文件
3.locate-输入文件部分名称即可搜索
4.find-不常用,速度慢,很耗硬盘
find [path] [option] [action]
ssh为 secure shell的缩写,其为建立在应用层和传输层基础上的安全协议,是目前较为安全的网络服务程序。
下面主要介绍一下在Ubuntu系统下的安装和加密。
一、安装
联网终端敲进命令
$ sudo apt-get install openssh-server
系统将自动进行安装,安装完成以后,先启动服务
$ sudo /etc/init.d/ssh start
$ sudo /etc/init.d/ssh start
启动后,可以通过如下命令查看服务是否正确启动
$ ps -e|grep ssh
6212 ? 00:00:00 sshd
$ ps -e|grep ssh 6212 ? 00:00:00 sshd
如上表示启动ok。注意,ssh默认的端口是22,可以更改端口,更改后先stop,然后start就可以了。
更改配置在/etc/ssh/sshd_config下,如下所示。
$ vi /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd(8) manpage for details
# What ports, IPs and protocols we listen for
Port 22
二、连接
与服务器连接
$ ssh 主机名@IP地址
我们使用RSA密钥认证的目的是:从client端登陆server端时,不需要密码认证。
所以,我们在进行认证时首先需要在client端建立属于client端自己的一对密钥(公钥和私钥),建立方法如下:
在命令行下执行:$ ssh-keygen
执行过程中,它先要求你确认保存公钥的位置(默认为:.ssh/id_rsa),
然后它会让你重复输入一个密码两次,如果不想在使用公钥的时候输入密码,可以留空
执行完毕后,就会生成数据client端的一对密钥。
SSH 密钥默认储存在账户的家目录下的 ~/.ssh 目录中
关键是看有没有用 xxx_rsa 和 xxx_rsa.pub 来命名的一对文件,有 .pub 后缀的文件就是公钥,另一个文件则是密钥。
2.将Client端的公钥添加到用于认证的Server端的公钥文件中
首先检查Server端需要认证的phenix用户的家目录下,隐藏目录“ssh”目录下是否存在一个名为“authorized_keys”的文件,
若不存在,使用命令:touch authorized_keys 创建一个空文件
创建完成后,则可以执行如下步骤:
执行步骤如下:
1)将Clinet端公钥的内容复制
2)将复制到的Client端公钥内容,粘贴至Server端刚才创建的 authorized_keys 文件中,保存文件。
3)更改 authorized_keys 文件的权限
执行命令:chmod 600 authorized_keys
3.验证无密码登陆
在Client端命令行执行如下命令:
ssh -p12 phenix@10.2.31.33 (本例ssh服务开在了12端口,默认为22)
直接登陆至Server端,表示验证成功。
注意:
1)ssh-keygen执行完毕后一定要检查下phenix用户家目录下.ssh目录中是否有一对密钥
2)在将公钥粘贴至Server端后,一定要修改authorized_keys文件的权限为600,否则认证会失败
3)Server端需要开启SSH服务,不然客户端使用ssh连接不上
一直用着is-programmer编写blog,突然发现我提交的文章时间很是怪异(很多都是凌晨几点的)。
原来该网站的服务器不在中国non~~
于是我就查了查:
该文章发表之后看看发表时间
现在北京时间是 Tuesday,10 June 2014 16:41
然后根据世界时间时区表查询即可得知
中国位于东八区(+8)
由发表时间可知,该网站服务器位于西十一区(-11)