所有由csj555发布的文章

程序中的现场保护和现场恢复

我对这个也不是了解的很深,在学,先记一笔。

现场保护和现场恢复概念来源于汇编中主程序和子程序之间的调用和返回。和CPU中断机制有关。

主程序和子程序通常是分别编制的,所以它们所使用的寄存器往往会发生冲突。如果主程序在调用子程序之前的某个寄存器内容在从子程序返回后还有用,而子程序又恰好使用了同一个寄存器,这就破坏了该寄存器的原有内容,因而造成程序运行错误,这是不允许的。为避免这种错误的发生,在一进入子程序后,就应该把子程序所需要使用的寄存器内容保存在堆栈中,此过程称作现场保护。在退出子程序前把寄存器内容恢复原状,此过程称作现场恢复。现场保护与现场恢复分别使用压栈和弹出指令实现。

而在高级编程语言C、C++中与这个类似,虽然不用直接操作寄存器,但是在函数调用过程中对堆栈、静态变量操作也要注意。

C语言中把变量存储在三个地方:
静态存储区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的声明周期内都存在,由编译器在编译的时候分配。
栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。
堆:由程序员手工分配(类似malloc函数),释放的内存(类似free函数)。在没释放之前一直存在,直到程序结束。
堆栈在内存的动态存储区。

在程序中如果临时变量、全局变量在其它地方调用或函数调用回来后修改过了,回到当前位置根据需要要恢复成原来的值。

嗯 暂时这样吧。

C语言和大小端模式

在操作系统中数据长度的单位有:字节、字、双字、四字(不包括浮点型)。
比如在VC6.0的windef.h中定义了BYTE、WORD、DWORD这些类型:

typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef unsigned long       DWORD;
当然四字类型可以定义为:
typedef unsigned long long  DDWORD;


大小端模式就和CPU对字、双字、四字的存储方式有关了。
大端模式(Big-Endian):字数据的高字节存储在低地址中,字数据的低字节存储在高地址中。
小端模式(Little-Endian):字数据的高字节存储在高地址中,字数据的低字节存储在低地址中。
继续阅读C语言和大小端模式

IE8提示“The current web page is trying to open a site in your Trusted sites list. Do you want to allow this.”

有时候用IE8经常会跳出一个框提示“The current web page is trying to open a site in your Trusted sites list. Do you want to allow this.”,网上找了去掉它的方法,特搬来。

1、打开IE,点击 Tools > Internet Options
2、点击 Security 选项卡
3、点击 Trusted Sites
4、点击 Custom Level(Security level设置为Low)
继续阅读IE8提示“The current web page is trying to open a site in your Trusted sites list. Do you want to allow this.”

从RPM包中提取文件

要从rpm包中提取一个配置文件可以使用rpm2cpio和cpio命令完成。系统为CentOS6.2。

rpm2cpio命令和cpio命令都是系统默认支持的命令。rpm2cpio命令是将一个rpm包转换成cpio档案格式显示在标准输出中(可保存为.cpio文件),cpio文件是UNIX系统下的一个打包格式,然后用cpio命令解压.cpio文件,最后提取出需要的文件。

以mytop-1.7-3.el6.noarch.rpm为例:

rpm2cpio mytop-1.7-3.el6.noarch.rpm > mytop.cpio
cpio -idmv < mytop.cpio

显示释放了usr目录:

./usr/bin/mytop
./usr/share/doc/mytop-1.7
./usr/share/doc/mytop-1.7/Changes
./usr/share/doc/mytop-1.7/README
./usr/share/man/man1/mytop.1.gz
137 blocks

参数说明:
-i:从文档中提取文件
-d:保持内部文件的目录
-m:创建文件时保持文件修改的时间(时间戳)
-v:显示处理进度

以上也可写成一句命令:
rpm2cpio mytop-1.7-3.el6.noarch.rpm | cpio -idmv

最后提取自己需要的文件就可以了。

CentOS Linux自建yum源

平时使用yum方式安装更新软件,可以自建一个yum源,同步官方更新源,这样如果本地有机器要升级的话就可以直接使用本地的更新源了。这里系统为CentOS 6.2。

一、服务端
1、安装需要的环境
自建yum本地更新源可以使用http服务或ftp服务,由于ftp服务器要考虑防火墙配置,主动、被动连接模式,这里使用http服务。

安装apache:

yum install httpd

配置apache过程略过。

2、安装createrepo软件包

yum install createrepo

3、建立存放软件包目录

mkdir -p /home/yum/centos/6/
chown -R apache:apache /home/yum/

4、apache创建虚拟目录

vim /etc/httpd/conf/httpd.conf
继续阅读CentOS Linux自建yum源

C语言内存观

  在内存中存储的数据都是以二进制形式存储,比如有一个字节数据为11110001。把它看成十六进制就是0xF1,看成十进制就是数值241,看成有符号的数值就是-113,看成ASCII码是一个不可显示的字符(ASCII码范围是数值0-255),看成BCD码就是由0x0F和0x01组成的。在内存中这个字节一直是11110001,各种进制是我们看待它的一种表象。

养肾“黑五类”

  虽说大家向往皮肤越白越好,但营养学家却推荐,吃的食物越黑越健康。传统中医学把不同颜色的食物或药物归属于人体的五脏:红色入心,青色入肝、黄色入脾,白色入肺,黑色入肾。所以,生活中我们根据颜色选择饮食,是种简单易行的方法。而黑色食物对肾的滋养和呵护,更是受到了专家的肯定。

黑米

  米中的珍品——黑米,也被称为“黑珍珠”,含有丰富的蛋白质、氨基酸以及铁、钙、锰、锌等微量元素,有开胃益中、滑涩补精、健脾暖肝、舒筋活血等功效;中医认为黑米有显著的药用价值,古农医书记载:黑米“滋阴补肾,健身暖胃,明目活血”,“清肝润肠”,“滑湿益精,补肺缓筋”等功效;可入药入膳,对头昏目眩、贫血白发、腰膝酸软、夜盲耳鸣症、疗效尤佳。长期食用可延年益寿。因此,人们俗称:“药米”、“长寿米”。由于它最适于孕妇、产妇等补血之用,又称“月米”、“补血米”等。历代帝王也把它作为宫廷养生珍品,称为“贡米”。
继续阅读养肾“黑五类”

CentOS Linux安装mantis

Mantis是一个轻量级的缺陷管理平台(全称Mantis Bug Tracker),用来跟踪管理Bug,即bug管理系统。官网:http://www.mantisbt.org/

1、安装web server
Mantis是用PHP编写的,要安装一个PHP的web server。这里使用LAMP。

yum install httpd mysql mysql-devel mysql-server php php-mysql php-bcmath php-gd php-mbstring php-xml

配置LAMP过程略过。

PS:php.ini中要设置好date.timezone。

2、下载Mantis
目前最新稳定版为Mantis 1.2.11。

cd /tmp
wget http://sourceforge.net/projects/mantisbt/files/mantis-stable/1.2.11/mantisbt-1.2.11.tar.gz/download
tar -zxvf mantisbt-1.2.11.tar.gz
mv mantisbt-1.2.11 /var/www/html/mantis
chown -R apache:apache /var/www/html/mantis
继续阅读CentOS Linux安装mantis

CentOS Linux安装postfix邮件服务器

postfix是一个高效的邮件服务器,配置比sendmail简单,这里使用LAMP+postfix+dovecot+SquirrelMail搭建提供SMTP/POP3/IMAP的简单邮件服务。系统是CentOS6.2。

简单说明:
postfix是一个MTA即邮件传输代理。作为收件服务器。
dovecot是一个开源的IMAP和POP3邮件服务器。作为发件服务器。

准备工作:
1、卸载sendmail

yum remove sendmail

2、安装LAMP

yum install httpd mysql mysql-devel mysql-server php php-mysql php-bcmath php-gd php-mbstring php-xml php-imap

配置LAMP过程略过。

一、安装postfix
使用源码编译安装。
1、建立postfix所需的用户和组
建立postfix、postdrop组和postfix用户:

groupadd -g 2001 postfix
useradd -g postfix -u 1001 -s /sbin/nologin -M postfix
groupadd -g 2002 postdrop
继续阅读CentOS Linux安装postfix邮件服务器

C语言库函数学习(1)

1、memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

2、memcmp
原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
功能:比较内存区域buf1和buf2的前count个字节。
比较结果:
当buf1<buf2时,返回值<0
当buf1=buf2时,返回值=0
当buf1>buf2时,返回值>0

3、memset
原型:extern void *memset(void *buffer, int c, int count);
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。
备注:常用于初始化连续的一块内存。
继续阅读C语言库函数学习(1)