2008年12月22日星期一

内存管理实验源代码

我的内存管理实验的源代码
[gaowei@localhost memory]$ ls
display_menu.c main.c Makefile2 memory.h
上面是代码的目录
编译后的目录如下:
[gaowei@localhost memory]$ ls
display_menu.c display_menu.o main.o Makefile2 memory memory.h
再详细看看我的代码
头文件在memory.h中!
#include <stdio.h>
#include <stdlib.h>/*会引起警告:隐式声明与内建函数 “malloc” "exit“ 不兼容*/
#include <unistd.h>
/*memory.c:331: 警告:隐式声明与内建函数 ‘_exit’ 不兼容*/
#define PROCESS_NAME_LEN 32 /*进程名称的最大长度*/
#define MIN_SLICE 10 /*最小碎片的大小*/
#define DEFAULT_MEM_SIZE 1024 /*默认内存的大小*/
#define DEFAULT_MEM_START 0 /*默认内存的起始位置*/
/* 内存分配算法 */
#define MA_FF 1
#define MA_BF 2
#define MA_WF 3
在看看我的Makefile的文件:
memory: main.o display_menu.o
gcc -o memory main.o display_menu.o
main.o: main.c memory.h
gcc -c main.c
display_memu.o: display_memu.c memory.h
gcc -c display_memu.c
在看看我的菜单的文件,现在由于要考试了,时间紧张,所以只是完成了老师规定的内容,我想用把他做成图形界面的,用#include <curses.h>这个头文件,如果你没有可以下载,是终端界面设计的
所以我的菜单文件是
#include "memory.h"

int display_menu(void){
printf("\n");
printf("1 - Set memory size (default=%d)\n", DEFAULT_MEM_SIZE);
printf("2 - Select memory allocation algorithm\n");
printf("3 - New process \n");
printf("4 - Terminate a process \n");
printf("5 - Display memory usage \n");
printf("0 - Exit\n");

}
我的主函数的代码是
#include "memory.h"

extern void display_menu();

struct allocated_block *find_process(int pid);

/*描述每一个空闲块的数据结构*/
struct free_block_type{
int size;
int start_addr;
struct free_block_type *next;
};

/*指向内存中空闲块链表的首指针*/
struct free_block_type *free_block;

/*每个进程分配到的内存块的描述*/
struct allocated_block{
int pid;
int size;
int start_addr;
char process_name[PROCESS_NAME_LEN];
struct allocated_block *next;
};

/*进程分配内存块链表的首指针*/
struct allocated_block *allocated_block_head = NULL;

int mem_size=DEFAULT_MEM_SIZE; /*内存大小*/
int ma_algorithm = MA_FF; /*当前分配算法*/
static int pid = 0; /*初始pid*/
int flag = 0;/* 设置内存大小标志*/

/*初始化空闲块,默认为一块,可以指定大小及起始地址*/
struct free_block_type* init_free_block(int mem_size){
struct free_block_type *fb;
fb=(struct free_block_type *)malloc(sizeof(struct free_block_type));
if(fb==NULL){
printf("No mem\n");
return NULL;
}
fb->size = mem_size;
fb->start_addr = DEFAULT_MEM_START;
fb->next = NULL;
return fb;
}

/*设置内存的大小*/
set_mem_size() {
int size;
if(flag!=0){ /*防止重复设置*/
printf("Cannot set memory size again\n");
return 0;
}
printf("Total memory size =");
scanf("%d", &size);
if(size>0) {
mem_size = size;
free_block->size = mem_size;
}
flag=1;
return 1;
}

/* 设置当前的分配算法 */
set_algorithm(){
int algorithm;
printf("\t1 - First Fit\n");
printf("\t2 - Best Fit \n");
printf("\t3 - Worst Fit \n");
scanf("%d", &algorithm);
if(algorithm>=1 && algorithm <=3)
ma_algorithm=algorithm; /*按指定算法重新排列空闲区链表*/
rearrange(ma_algorithm); }

/*按指定的算法整理内存空闲块链表*/
rearrange(int algorithm){
switch(algorithm){
case MA_FF: rearrange_FF(); break;
case MA_BF: rearrange_BF(); break;
case MA_WF: rearrange_WF(); break;
}
}

void swap(int *p1,int *p2) {
int temp; temp=*p1; *p1=*p2; *p2=temp;
}

/*按FF算法重新整理内存空闲块链表*/
rearrange_FF(){
struct free_block_type *tmp, *work;
printf("Rearrange free blocks for FF \n");
tmp = free_block; while(tmp!=NULL) {
work = tmp->next;
while(work!=NULL){
if( work->start_addr <>start_addr) { /*地址递增*/
swap(&work->start_addr, &tmp->start_addr);
swap(&work->size, &tmp->size);
}
work=work->next;
}
tmp=tmp->next;
}
}


/*按BF算法重新整理内存空闲块链表*/
rearrange_BF(){
struct free_block_type *tmp, *work;
printf("Rearrange free blocks for BF \n");
tmp = free_block;
while(tmp->next!=NULL) {
work = tmp->next;
while(work!=NULL) {
if(work->size > tmp->size) { /*大小递减*/
swap(&work->start_addr,&tmp->start_addr);
swap(&work->size,&tmp->size);
}
work = work->next;
}
tmp = tmp->next;
}
return 0;
}

/*按WF算法重新整理内存空闲块链表*/
rearrange_WF(){
struct free_block_type *tmp, *work;
printf("Rearrange free blocks for WF \n");
tmp = free_block;
while(tmp->next!=NULL) {
work = tmp->next;
while(work!=NULL) {
if(work->size <>size) { /*大小递增*/
swap(&work->start_addr,&tmp->start_addr);
swap(&work->size,&tmp->size);
}
work = work->next;
}
tmp = tmp->next;
}
return 0;
}

/*创建新的进程,主要是获取内存的申请数量*/
int new_process(void) {
struct allocated_block *ab;
int size;
int ret;
ab = (struct allocated_block *)malloc(sizeof(struct allocated_block));
if(!ab) exit(-5);
ab->next = NULL;
pid++;
sprintf(ab->process_name, "PROCESS-%02d", pid);
ab->pid = pid;

printf("Memory for %s:", ab->process_name);
scanf("%d", &size);
if(size>0) ab->size = size;
ret = allocate_mem(ab); /* 从空闲区分配内存,ret==1表示分配ok*/
/*如果此时allocated_block_head尚未赋值,则赋值*/
if((ret==1) &&(allocated_block_head == NULL)){
allocated_block_head=ab;
return 1;
}
/*分配成功,将该已分配块的描述插入已分配链表*/
else if (ret==1) {
ab->next=allocated_block_head;
allocated_block_head=ab;
return 2;
}
else if(ret==-1){ /*分配不成功*/
printf("Allocation fail\n");
free(ab);
return -1;
}
return 3;
}

/*分配内存模块*/
int allocate_mem(struct allocated_block *ab) {
struct free_block_type *fbt, *pre;
int request_size = ab->size;
fbt = pre = free_block;
printf("%d", fbt->start_addr);
while(fbt!=NULL) {
if(fbt->size>=request_size){/*分配后空闲空间足够大,则分割*/
if((fbt->size-request_size)>MIN_SLICE) {
ab->size = request_size;
ab->start_addr = fbt->start_addr;
fbt->size -= request_size;
fbt->start_addr += request_size;
}
else {/*分割后空闲区成为小碎片,一起分配*/
ab->size = fbt->size;
ab->start_addr = fbt->start_addr;
if (fbt == free_block)
free_block = fbt->next;
else {
pre->next = fbt->next;
free(fbt);
}
}
return 1;
}
pre = fbt;
fbt = fbt->next;
}
return 0;
}

/*删除进程,归还分配的存储空间,并删除描述该进程内存分配的节点*/
kill_process(void){
struct allocated_block *ab;
int pid;
printf("Kill Process, pid=");
scanf("%d", &pid);
ab=find_process(pid);
if(ab!=NULL){
free_mem(ab); /*释放ab所表示的分配区*/
dispose(ab); /*释放ab数据结构节点*/
}
}

/*struct free_block_type* find_process(int pid) */
struct allocated_block *find_process(int pid)
{
struct allocated_block *ab=allocated_block_head;
while(ab!=NULL) {
if(pid != ab->pid) {
ab=ab->next;
}
else return ab;
}
}


/*将ab所表示的已分配区归还,并进行可能的合并*/
int free_mem(struct allocated_block *ab){
int algorithm = ma_algorithm;
struct free_block_type *fbt, *pre, *work;

fbt=(struct free_block_type*) malloc(sizeof(struct free_block_type));
if(!fbt) return -1;
fbt->size = ab->size;
fbt->start_addr = ab->start_addr;
/*插入到空闲区链表的头部并将空闲区按地址递增的次序排列*/
fbt->next = free_block;
free_block=fbt;
rearrange(MA_FF);/*默认是FF算法*/
fbt=free_block;
while(fbt!=NULL){
work = fbt->next;
if(work!=NULL){
/*如果当前空闲区与后面的空闲区相连,则合并*/
if(fbt->start_addr+fbt->size == work->start_addr){
fbt->size += work->size;
fbt->next = work->next;
free(work);
continue;
}
}
fbt = fbt->next;
}
rearrange(algorithm); /*重新按当前的算法排列空闲区*/
return 1;
}

/*释放ab数据结构节点*/
int dispose(struct allocated_block *free_ab) {
struct allocated_block *pre, *ab;
if(free_ab == allocated_block_head) { /*如果要释放第一个节点*/
allocated_block_head = allocated_block_head->next;
free(free_ab);
return 1;
}

pre = allocated_block_head;
ab = allocated_block_head->next;

while(ab!=free_ab){ pre = ab; ab = ab->next; }
pre->next = ab->next;
free(ab);
return 2;
}

/* 显示当前内存的使用情况,包括空闲区的情况和已经分配的情况 */
int display_mem_usage(void) {
struct free_block_type *fbt = free_block;
struct allocated_block *ab = allocated_block_head;
if(fbt==NULL) return(-1);
printf("----------------------------------------------------------\n");

/* 显示空闲区 */
printf("Free Memory:\n");
printf("%20s %20s\n", " start_addr", " size");
while(fbt!=NULL) {
printf("%20d %20d\n", fbt->start_addr, fbt->size);
fbt=fbt->next;
}
/* 显示已分配区 */
printf("\nUsed Memory:\n");
printf("%10s %20s %10s %10s\n", "PID", "ProcessName", "start_addr", " size");
while(ab!=NULL){
printf("%10d %20s %10d %10d\n", ab->pid, ab->process_name, ab->start_addr, ab->size);
ab=ab->next;
}
printf("----------------------------------------------------------\n");
return 0;
}



do_exit()
{
/* exit(0); */
_exit(0);
return 0;
}


int main(void)
{
char choice;

pid=0;
free_block = init_free_block(mem_size); /*初始化空闲区*/
for(;;) {
display_menu(); //显示菜单
fflush(stdin);
scanf("%s", &choice);
switch(choice) {
case '1': set_mem_size();break; /*设置内存大小*/
case '2': set_algorithm();flag=1;break;/*设置分配算法*/
case '3': new_process(); flag=1;break; /*创建新进程*/
case '4': kill_process(); flag=1;break;/*删除进程*/
case '5': display_mem_usage();flag=1;break;/*显示内存使用*/
case '0': do_exit(); exit(0); /*释放链表并退出*/
default: break;
}
}
}

2008年12月11日星期四

fc8 重装之后

命令
挂载ntfs格式的命令
mount -t ntfs-3g /dev/sda7 /media/gao/ -o force
看一些权限
cat /boot/config-2.6.23.1-42.fc8 | grep -i ext3
解压rar包
/media/SOFTWARE/linux/rar/rar x
alacarte 是Main Menu的命令
用cat /proc/下面的看到很多的信息
如:cat /proc/version 看linux的版本
cat /proc/meminfo 看内存信息
cat /proc/cpuinfo 看cpu的信息
在终端打开emacs -nw
mysoftware
1。安装chm阅读器sudo yum install gnochm
2。firefox
标签/home/gaowei/.mozilla/firefox/8umrv5sm.default
bookmarksb.bak
bookmarksb.html
3.webmin-1.400-1.noarch.rpm
4.realplayer 11 gold
http://linux.softpedia.com/progDownload/RealPlayer-Download-2742.html
Preparing... ########################################### [100%]
package RealPlayer-11.0.1.1056-20081001 is already installed
6。gtk
当./configure完了之后就
出现下面的内容:
checking pkg-config is at least version 0.9.0... yes
checking for BASE_DEPENDENCIES... configure: error: Package requirements (glib-2.0 >= 2.17.6 atk >= 1.13.0 pango >= 1.20 cairo >= 1.6) were not met:
Requested 'glib-2.0 >= 2.17.6' but version of GLib is 2.14.2
Requested 'pango >= 1.20' but version of Pango is 1.18.3
Requested 'cairo >= 1.6' but version of cairo is 1.4.10
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables BASE_DEPENDENCIES_CFLAGS
and BASE_DEPENDENCIES_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
7 VirtualBox
sudo rpm -ivh qt4-4.4.1-2.fc8.i386.rpm
sudo rpm -ivh qt4-4.4.3-1.fc8.i386.rpm
sudo rpm -ivh qt4-x11-4.4.3-1.fc8.i386.rpm
sudo rpm -ivh VirtualBox-2.0.6_39765_fedora8-1.i386.rpm
rpm
口令:
Preparing... ########################################### [100%]
1:VirtualBox ########################################### [100%]
chcon: can't apply partial context to unlabeled file /usr/lib/virtualbox/VirtualBox
chcon: can't apply partial context to unlabeled file /usr/lib/virtualbox/VBoxSDL
chcon: can't apply partial context to unlabeled file /usr/lib/virtualbox/VBoxHeadless
chcon: can't apply partial context to unlabeled file /usr/lib/virtualbox/vboxwebsrv
Creating group 'vboxusers'. VM users must be member of that group!
No precompiled module for this kernel found -- trying to build one. Messages
emitted during module compilation will be logged to /var/log/vbox-install.log.
Success!
8。关于一些绘图软件
gaphor
安装要超级用户,而且要有网络才可以,好像要下载一些东西的
You can start Gaphor by running the run-gaphor.sh
dia
很好安装,和一般的源代码安装方法是一样的!
关于一些图片的位置
/usr/share/pixmaps
/usr/share/icons/hicolor/scalable/apps
9
[gaowei@localhost qq]$ sudo rpm -ivh skype-2.0.0.72-fc5.i586.rpm
warning: skype-2.0.0.72-fc5.i586.rpm: Header V3 DSA signature: NOKEY, key ID d66b746e
Preparing... ########################################### [100%]
1:skype ########################################### [100%]
[gaowei@localhost qq]$ skype
10.
[gaowei@localhost player]$ ./Livestation-2.5.0.run
----------------------------------------\n
Do you accept the license [y/n]: y
\n----------------------------------------\n
-> Non-root user detected, will try to sudo when copying.
\n----------------------------------------\n
Installation directory [/usr/local/Livestation]:
Installation directory [/usr/local/Livestation]:
\n----------------------------------------\n
Create a symlink in /usr/bin [Y/n]: y
\n----------------------------------------\n
-> Making directory /usr/local/Livestation.
口令:
-> Copying files.
-> Creating symlinks.
\n----------------------------------------\n
Done. Run 'livestation' to start the player.\n
[gaowei@localhost player
http://tvants.en.softonic.com/
11.3d软件
[gaowei@localhost ArtOfIllusion]$ ls
aoi-linux-install.jar aoisetup.sh
[gaowei@localhost ArtOfIllusion]$ ./aoisetup.sh
/usr/bin/java -jar aoi-linux-install.jar
[gaowei@localhost ArtOfIllusion]$
12
[root@localhost install_flash_player_10_linux]# ./flashplayer-installer
Copyright(C) 2002-2006 Adobe Macromedia Software LLC. All rights reserved.
Adobe Flash Player 10 for Linux
Adobe Flash Player 10 will be installed on this machine.
You are running the Adobe Flash Player installer as the "root" user.
Adobe Flash Player 10 will be installed system-wide.
Support is available at http://www.adobe.com/support/flashplayer/
To install Adobe Flash Player 10 now, press ENTER.
To cancel the installation at any time, press Control-C.
NOTE: Please exit any browsers you may have running.
Press ENTER to continue...
Please enter the installation path of the Mozilla, Netscape,
or Opera browser (i.e., /usr/lib/mozilla):
10。links浏览器
vmware
序列号N1HPX-6U248-D206Y-4Y8Z6
[root@localhost ~]# /usr/bin/vmware-config.pl
1.
In which directory do you want to install the theme icons?
[/usr/share/icons]
What directory contains your desktop menu entry files? These files have a
.desktop file extension. [/usr/share/applications]
In which directory do you want to install the application's icon?
[/usr/share/pixmaps]
None of the pre-built vmmon modules for VMware Workstation is suitable for your
running kernel. Do you want this program to try to build the vmmon module for
your system (you need to have a C compiler installed on your system)? [yes]
Using compiler "/usr/bin/gcc". Use environment variable CC to override.
What is the location of the directory of C header files that match your running
kernel? [/lib/modules/2.6.23.1-42.fc8/build/include]
None of the pre-built vmblock modules for VMware Workstation is suitable for
your running kernel. Do you want this program to try to build the vmblock
module for your system (you need to have a C compiler installed on your system)? [yes]
Do you want networking for your virtual machines? (yes/no/help) [yes]
You must read and accept the VMware VIX API End User License Agreement to
continue.
Press enter to display it.
Do you accept? (yes/no) yes
Thank you.
In which directory do you want to install the VMware VIX API binary files?
[/usr/bin]
In which directory do you want to install the VMware VIX API library files?
[/usr/lib/vmware-vix/lib]
The path "/usr/lib/vmware-vix/lib" does not exist currently. This program is
going to create it, including needed parent directories. Is this what you want?
[yes]
In which directory do you want to install the VMware VIX API document pages?
[/usr/share/doc/vmware-vix]
In which directory do you want to install the VMware VIX API document pages?
[/usr/share/doc/vmware-vix]
In which directory do you want to install the VMware VIX API document pages?
[/usr/share/doc/vmware-vix]
hardware
[gaowei@localhost AMUSEMENT ]$ mount
/dev/sda9 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
none on /proc/fs/vmblock/mountPoint type vmblock (rw)
/dev/sda8 on /media/AMUSEMENT type fuseblk (rw,nosuid,nodev,noatime,allow_other,blksize=4096)
/dev/sda1 on /media/OS type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=500)
/dev/sda6 on /media/SOFTWARE type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=500)
/dev/sda7 on /media/LESSON type fuseblk (rw,nosuid,nodev,noatime,allow_other,blksize=4096)
/dev/sda5 on /media/VMWARE type ext2 (rw,nosuid,nodev,uhelper=hal)
[gaowei@localhost AMUSEMENT ]$ df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda9 19304228 8826728 9481072 49% /
tmpfs 772932 12 772920 1% /dev/shm
/dev/sda8 12330328 6150732 6179596 50% /media/AMUSEMENT
/dev/sda1 15716960 712152 15004808 5% /media/OS
/dev/sda6 15716960 2769888 12947072 18% /media/SOFTWARE
/dev/sda7 15732328 4274160 11458168 28% /media/LESSON
/dev/sda5 34911367 5847569 27228610 18% /media/VMWARE
一种IDE应为hdb是用来命名主IDE上的从接口
另一种SCSI接口设备是用sd命名的
http://219.238.239.156:8000/osw/nimda
用户 u1006 口令 pass
 李开复:一是“内功”要学好,不要只是去学各种皮毛的语言、工具,和一些三流公司招聘列出来的要求,要把数据结构、算法、数据库、操作系统原理、计算机结构、离散数学等课程学好;二是多编程,最好大学四年有十万行编程的经验;还要讲究“实干”,Google是动手者的天堂,另外要有一些数学能力,还要练习团队精神,与人合作。
在 Linux 内核源文件 include/asm-i386/unistd.h 中,可以找到所有系统调用的定义。
http://kernelnewbies.org/KernelHacking
解压
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
---------------------------------------------
.rar
解压:rar a FileName.rar
压缩:r ar e FileName.rar


rar请到:http://www.rarsoft.com/download.htm 下载!
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
---------------------------------------------
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName

lha请到:http://www.infor.kanazawa-it.ac.jp/.../lhaunix/下载!
>解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp lha /usr/bin/
---------------------------------------------
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
---------------------------------------------
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh
.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName

sEx只是调用相关程序,本身并无压缩、解压功能,请注意!
sEx请到: http://sourceforge.net/projects/sex下载!
解压后请将sEx拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp sEx /usr/bin/
(其实看帮助是最好的方法,一般各个命令都可以用“--help”参数得到常用使用方法!
卸载wine安装的软件
Wine Software Uninstaller万一不行就用下面的!
~/.wine/drive_c/删除你不想要的!
cd~/.local/share/applications/wine/
这四个目录中保存着安装的程序信息,删除就可以了:
$HOME/.config/menus/applications-merged/wine* (好像是xml文件,有乱码也没有关系,不会影响显示!)
$HOME/.local/share/applications/wine (直接影响开始程序菜单中的显示!)
$HOME/.local/share/desktop-directories/wine*
$HOME/.local/share/icons/????_*.xpm (程序图标)

2008年11月16日星期日

浏览器——应该学习!

Google Chrome 源码下载

Goolgle 于 2008.09.02 发布了浏览器 Google Chrome。Google Chrome 使用的内核源码来自开源浏览器引擎 WebKit Open Source Project。Google Chrome 的源码,同样亦是开源的。在 Google 的中文官方 Blog - Google 黑板报中,提到:

QUOTE: 我们对很多开发开源项目的人心存 感激,我们承诺会沿着前人的路继续前行。 我们借鉴了一些源自 Apple WebKit 和 Mozilla Firefox 的技术,怀着同样开源的精神,谷歌浏览器所有的代码全部开源。我们希望能与整个业界合作从而促进互联网的健康发展。

  目前 Google Chrome 源码已经公布了,有兴趣的软件开发者程序员可以从 chromium.org 服务器使用 SVN checkout Google Chrome Source Code,自定义自己的浏览器。

Google Chrome 源码下载地址 (Google Chrome Source Code Download)

  1. Google Chrome 源码 SVN 地址http://src.chromium.org/svn。包含有 Chrome、Gears、Webkit、GCC 等源码以及编译依赖工具。Chrome 浏览器项目的源码,位于目录 http://src.chromium.org/svn/trunk/src/chrome/

  2. Google Chrome 源码 Web 浏览地址http://src.chromium.org/viewvc/

  3. Google Chrome 所使用的 JavaScript V8 的源码下载地址http://code.google.com/p/v8/

WebKit Open Source Project 内核引擎的前世今生

  WebKit 的前身是 KDE 小组的 KHTML。Apple将 KHTML 发扬光大,推出了装备 KHTML 改进型的 WebKit 引擎的浏览器 Safari,获得了非常好的反响。

  WebKit 引擎比 Gecko 引擎更受程序员欢迎的原因,除了其引擎的高效稳定,兼容性好外,其源码结构清晰,易于维护,是一个重要的原因。而 Gecko 的可维护性就差多了。我在 2008年6月时候,曾编译 Gecko 引擎,准备做一个基于 Gecko 的 Embed 应用程序,但文档缺乏、结构欠清晰,折腾了一星期之后,最终不得不承认自己水平有限,放弃了事。

  现在浏览器的内核引擎,基本上是三分天下:

  • Trident: IE 以Trident 作为内核引擎。
  • Gecko: Firefox 是基于 Gecko 开发。
  • WebKit: Safari, Google Chrome 基于 Webkit 开发。

  WebKit 内核在手机上的应用十分广泛,例如 Google 的手机 Gphone、 Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。

  下面是 WebKit 首页关于 WebKit 的介绍:

Webkit Open Source Project

The WebKit Open Source Project

WebKit is an open source web browser engine. WebKit is also the name of the Mac OS X system framework version of the engine that's used by Safari, Dashboard, Mail, and many other OS X applications.

WebKit's HTML and JavaScript code began as a branch of the KHTML and KJS libraries from KDE. This website is also the home of S60's S60 WebKit development.

  WebKit 的 Source Code 源码程序,可从 http://webkit.org/building/checkout.html checkou 下载。

Google Chrome Source Code 源码下载

  基于 WebKit 内核的 Google Chrome 的源码也是是公开的,Google 官方 Blog 的文章 《谷歌浏览器(Google Chrome), Chromium 以及竞争》 说道:

  为确保我们所推动的每一个进展都有益于整个互联网社区——不仅仅是我们自己,谷歌浏览器完全开源。谷歌浏览器的源代码放在 Chromium 之下,任何人都可以在他们的项目中使用谷歌浏览器的源代码——即使他们意图开发一个与我们形成竞争的浏览器(“Shrome”,或者其它名字?)。

Google Chrome究竟伤害了谁?(来源)

谷歌与微软的战线从搜索到网络广告、办公软件、手机操作 系统。除了搜索以外,谷歌后来推出的基于互联网的免费产品,都难以对微软形成致命打击。新发布的浏览器Chrome则被谷歌寄予厚望,谷歌的内部人士“我 们天天研究IE8的弱点,然后照着它的弱点去打。它复杂,我们就把界面做得超级简单;它慢,我们就拼命提高速度;它不开源,我们就一定要开源。”看来 Chrome的竞争对手是IE。

事实是否如此呢?在Chrome上线短短的24小时内,在浏览器市场占据了令人印象深刻的1%的市场份额。此外,因Chrome浏览器的火爆而受到用户骤减伤害的是Firefox和Safari浏览器,而不是IE浏览器。



在Chrome发布的几天后,我也下载了一个,看看是否好用。装好Chrome后,第一印象是界面简单,很符合Google的风格,但是很多国内网站都是符合IE标准的,因此Chrome对某些在IE下正常运行的脚本的兼容性不够好。

面对特殊的中国市场,在未来的数个月,我们更加期待看到Chrome的发展前景。Chrome会继续赢得更多Firefox用户的芳心,还是用户在 Chrome更加成熟之前就人心恋旧,重返Firefox?Chrome会不会同样俘获主流IE用户?当Mac版本的Chrome发布之后,它又将对 Safari浏览器有何影响?

谷歌Chrome浏览器使用微软源代码

  新浪科技讯 北京时间9月16日消息,据国外媒体报道,众所周知,谷歌Chrome浏览器基于Firefox和WebKit,但微软高级项目经理斯科特·汉塞尔曼(Scott Hanselman)日前却表示,Chrome同时也使用了微软的源代码。

  在发布Chrome浏览器时,谷歌就承认Chrome得益于两大开源项目,Firefox和WebKit,而并未提及微软。但汉塞尔曼日前表示,这里也有微软的功劳。

  汉塞尔曼称,Chrome浏览器使用了微软的开源项目Windows Template Library(以下简称“WTL”),一个用来开发Windows应用程序和用户界面的组件。

  但汉塞尔曼强调,谷歌使用微软这部分代码乃合法之举。因为微软于2004年将有关浏览器的一部分代码转为开源,而谷歌正是根据开源协议授权使用了这批代码。

  在谷歌的Chrome浏览器上,谷歌将WTL 8.0列为第三方软件。Chrome浏览器为开源应用,因此其代码也对外开放。(李明)

http://hi.baidu.com/zhaochunyu0104/blog/item/dbf41adf1bbd601562279855.html

http://www.downdig.com/chrome/?tag=chrome%e6%ba%90%e7%a0%81%e5%88%86%e6%9e%90

2008年11月4日星期二

linux命令点滴记

很多时候,我们使用的命令是不常用的,但是很有用,当时用了,但是以后就很容易就忘记了。
所以,我现在开始记录一些有用的。
dmesg是一个查看系统日志的命令;
cat /proc/meminfo可以看内存;
free - Display amount of free and used memory in the system
ps(1), slabtop(1), vmstat(8), top(1)
[gaowei@localhost ~]$ dmesg |grep [mM][eE][mM]这个不错哦!看看内容不少啊!

cat /proc/stat

ps -aux|awk '{print $3,$11}'|sort -r

dmesg|grep -i ^mem
命令一个一个用,好用的记录,命令都是自己理解的。
arch是看你的机器是*86的?如我的是i686
animate可以放动画,也可以放照片但是不好用,只是可以放一张,以后学习一下。想一下,可以看照片的命令有:gthumb还有gimp当然它还可以对相片进行加工和处理,还算不错;还有f-spot
alacarte 这个命令可以打开,改变目录的对话窗口。

[gaowei@localhost common]$ nautilus --help
用法:nautilus [选项...] [URI...]
用文件管理器浏览文件系统

以后要不断的更新哦!

2008年10月10日星期五

svn的一些用法

由于现在一些需求,所以我要学svn
为什么要学它呢?因为我们接下来的一个实验要管理代码,所以我选择了google code作为储存代码的仓库了,不详细介绍了google code。因为现在很多人用,而且也比较简单了。
学习svn,当然先要下载一个它的客户端,安装好。
http://subversion.tigris.org/它的官方网站,可以下载,您要的!
手册下载http://svnbook.red-bean.com/
[gaowei@localhost myebook]$ mv IPv6.c trunk/
[gaowei@localhost myebook]$ ls
trunk
[gaowei@localhost myebook]$ cd trunk/
[gaowei@localhost trunk]$ cd ..
[gaowei@localhost myebook]$ svnadmin create tags
[gaowei@localhost myebook]$ svnadmin create branches
[gaowei@localhost myebook]$ ls
branches tags trunk
[gaowei@localhost myebook]$ svn import trunk https://myebook.googlecode.com/svn/trunk/ -m "first use svn"
增加 trunk/hooks
增加 trunk/hooks/pre-revprop-change.tmpl
增加 trunk/hooks/post-commit.tmpl
增加 trunk/hooks/post-lock.tmpl
增加 trunk/hooks/pre-commit.tmpl
增加 trunk/hooks/pre-lock.tmpl
增加 trunk/hooks/post-unlock.tmpl
增加 trunk/hooks/pre-unlock.tmpl
增加 trunk/hooks/start-commit.tmpl
增加 trunk/hooks/post-revprop-change.tmpl
增加 trunk/IPv6.c
增加 trunk/conf
增加 trunk/conf/svnserve.conf
增加 trunk/conf/passwd
增加 trunk/conf/authz
增加 trunk/db
增加 trunk/db/revs
增加 trunk/db/revs/0
增加 trunk/db/write-lock
增加 trunk/db/revprops
增加 trunk/db/revprops/0
增加 trunk/db/current
增加 trunk/db/uuid
增加 trunk/db/fs-type
增加 trunk/db/transactions
增加 trunk/db/format
增加 trunk/format
增加 trunk/dav
增加 trunk/locks
增加 trunk/locks/db.lock
增加 trunk/locks/db-logs.lock
增加 trunk/README.txt

提交后的版本为 6。
[gaowei@localhost myebook]$


我不知道它为什么要添加那么多呢?但是实际上才增加了三个
看这里http://code.google.com/p/myebook/source/browse/#svn/trunk

2008年10月7日星期二

vi命令点滴记

我会一直不断的添加的
今天,是要复制多行,在命令模式下:54,56 co 到你要的行n
这个比较简单,意思是从54行到56行的复制到n行开始。
还有
Vi 提供了文本移动和复制命令,用户利用这些指令可以方便的复制字符、文字、行还有文本块。
有关的命令如下:
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的后面
:行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3所在行的后面。
:行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3所在行的后面。
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
n: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换
用Alt加m也可以到命令模式
在命令模式下用:help options或者:help pattern可以看到一些关于set的设置方法
:n,mw 文件名 将第n行至第m行的内容写入指定的文件
:n,mw>>文件名 将第n行至第m行的内容以追加方式添加到指定文件的末尾
:r 文件名 将读取指定的文件内容,并插到当前光标所在的行的下面
:.= 显示当前光标所在行的行号
:n,ms/str1/str2/opt 从第n列搜寻到第m列,当m=$时为最后一行,搜索str1字串用str2替
换,opt选项若为g则自动全部替换,为c表示确认后替换。

选项设置

all: 列出所有选项设置情况

term: 设置终端类型

ignorance: 在搜索中忽略大小写

list: 显示制表位(Ctrl+I)和行尾标志($)

number: 显示行号

report: 显示由面向行的命令修改过的数目

terse: 显示简短的警告信息

warn: 在转到别的文件时若没保存当前文件则显示NO write信息

nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符

nowrapscan: 禁止vi在搜索到达文件两端时,又从另一端开始

mesg: 允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令

:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d: 将 n1行到n2行之间的内容删除
:w: 保存当前文件
:e filename: 打开文件filename进行编辑
:x: 保存当前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:!command: 执行shell命令command
:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,
若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command: 将命令command的输出结果放到当前行

寄存器操作

"?nyy: 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyw: 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyl: 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

"?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字

ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中


插入文本类命令

i: 在光标前

I: 在当前行首

a: 光标后

A: 在当前行尾

o: 在当前行之下新开一行

O: 在当前行之上新开一行

r: 替换当前字符

R: 替换当前字符及其后的字符,直至按ESC键

s: 从当前光标位置处开始,以输入的文本替代指定数目的字符

S: 删除指定数目的行,并以所输入文本代替之

ncw或nCW: 修改指定数目的字

nCC: 修改指定数目的行

删除命令

ndw或ndW: 删除光标处开始及其后的n-1个字

do: 删至行首

d$: 删至行尾

ndd: 删除当前行及其后n-1行

x或X: 删除一个字符,x删除光标后的,而X删除光标前的

Ctrl+u: 删除输入方式下所输入的文本

2008年8月25日星期一

一些标准

我们学习计算机的当然要看看一些标准了,不然会反很多的错误的,有了标准,那么很多事情就比较好办了。但是很多的标准是国外的人规定的,当然哪些网站也是英文的了。
一些主要的标准的网站http://www.open-std.org/这是 The site www.open-std.org is holding a number of web pages for groups producing open standards:里面有很多的标准,我应该关注看的是WG14 - C这个标准。
http://www.iso.org/iso/home.htm
他们的一些介绍

ISO (International Organization for Standardization) is the world's largest developer and publisher of International Standards.

ISO is a network of the national standards institutes of 157 countries, one member per country, with a Central Secretariat in Geneva, Switzerland, that coordinates the system.

ISO is a non-governmental organization that forms a bridge between the public and private sectors. On the one hand, many of its member institutes are part of the governmental structure of their countries, or are mandated by their government. On the other hand, other members have their roots uniquely in the private sector, having been set up by national partnerships of industry associations.

Therefore, ISO enables a consensus to be reached on solutions that meet both the requirements of business and the broader needs of society.

对于Linux,在这个领域的权威性的文档是LSB,他们的网址是http://www.linuxfoundation.org/en/LSB

应用程序环境(Common Application Environment,CEA),单一UNIX规范(single UNIX Specification)
网址http://www.opengroup.org/而single UNIX Specification要到http://www.unix.org/online.html注册
The Open Group is a vendor- and technology-neutral consortium, whose vision of Boundaryless Information Flow™ will enable access to integrated information within and between enterprises based on open standards and global interoperability.
What We Do
The Open Group developed a range of services that provides to its membership and also offers to third parties. These services include strategy, management, innovation, standards, certification and test development.

Our approach is “Making Standards Work®. We have extensive experience and a long track record in facilitating consensus to develop standards, including defining new standards, evolving existing ones, building consensus and providing support services, and developing best practices. We recognize the importance of assured conformance through certification and operate a number of programs, including certification for Common Operating Environment (COE) Platform, CORBA®, Identity Management and Directory Interoperability, IT Architects, IT Specialists, LSB®, POSIX®, Schools Interoperability Framework (SIF), TOGAF, UNIX®, and Wireless Application Protocol (WAP). To learn more, go to www.opengroup.org/certification/

The key catalyst that organizations can use to make progress towards the vision of Boundaryless Information Flow™ is enterprise architecture. Until recently, the concept of an enterprise IT architecture was a vision shared by very few organizations. Today, many organizations have achieved a degree of boundarylessness between their people, only to find that the stovepipes are even stronger in the IT systems. This is not surprising, given that these systems were built with the purpose that they would only support the needs of a single department, and did not foresee situations where they would need to integrate information and share with the systems of other departments or with strategic partners in the extended enterprise.

As enterprises look to develop a flexible overall enterprise architecture where IT principles are fully aligned with business principles and support a company’s vision, and where IT evolves in response to constantly changing business needs, they need to take an urban planner approach, which enables creation of IT ‘cities’ of the future. This approach is based on an architectural framework and a set of standards and regulations that all new implementations need to comply with and which provide guidance for integration with the legacy. In order to do that, we need experienced IT Architects.

Recognizing the industry demand, The Open Group, which also certifies professionals in the use of the TOGAF Architecture Development Method (ADM) for producing open architectures, launched the first independent, comprehensive IT Architect Certification program. The program defines global standards for measuring the skills and experience of IT architects and for the operation of IT architecture practices within enterprises. To learn more about the program, go to our IT Architect Certification site.

IEEE的网站http://www.ieee.org/portal/site发表了一系列的UNIX标准中的第一个标准POSIX

A non-profit organization, IEEE is the world's leading professional association for the advancement of technology.

The IEEE name was originally an acronym for the Institute of Electrical and Electronics Engineers, Inc. Today, the organization's scope of interest has expanded into so many related fields, that it is simply referred to by the letters I-E-E-E (pronounced Eye-triple-E).

Linux分配名字和数字机构(Linux Assigned Names And Numbers Authority,简称为LANANA)它的网址是http://www.lanana.org/

Welcome to LANANA, your authority for Linux name space assignments. LANANA's charter is to prevent namespace collisions by providing a responsive, easy-to-use registration service. Fewer collisions means better interoperability and more broadly available drivers and applications for Linux!
Filesystem Hierarchy Standard (FHS).文件系统层次的标准,http://pathname.com/fhs/
在学习这个知识的时候,看到了过去没有明白的一个问题/lost+found原来是用于fsck命令进行文件系统的恢复而/proc是一个伪文件系统。 This page is the home of the Filesystem Hierarchy Standard (FHS).The current version is 2.3. It was announced on January 29, 2004.The filesystem standard has been designed to be used by Unix distribution developers, package developers, and system implementors. However, it is primarily intended to be a reference and is not a tutorial on how to manage a Unix filesystem or directory hierarchy.


还有一些标准,请看http://www.openi18n.org/界面不错的网站

我们要学很多知识,看很多书才可以了解的更好。其实,很多问题,没有我们想象的那么简单,也没有我们想象的那么的难,好了,以后在编写程序的时候要注意这 些标准,不然的话,会出很多的问题,我们的电脑不是客户的电脑,我们的用的程序设计的语言也是人家的,当然要了解人家的标准了。

2008年8月20日星期三

暑假感触

我的生活感触
一个暑假就要过去了,说忙碌吗?开始的时候还是比较忙碌的,最后也就不是很忙了,很多时间就是被浪费了。自己还是太平凡了,没有好的毅力去实现自己的理想,其实有时自己还是不明确自己的理想。短期的目标还没有去实现,还是 比较有难度的。自己真的应该像奥运的运动员一样,顽强的拼搏,他们也是经过自己的努力才获得了成功,没有人可以随随便便的成功的。
这次奥运会,让我感触最深的是我也要成为那样优秀的人才,他们年轻,他们有活力,他们有意志,他们喜欢赢。而我还在这里碌碌无为地生活着,我不能这样下去,这样将不会成为他们的。
努力吧!
下学期的任务是,学好课内的,首要的是学好英语,过四级。在是学好网络结构体系,把师兄的文档进一步的完善和改进。写出自己的理会和心的,有优美的文字表达出来。还有就是那个项目一定要完成,而且是最好的,不像过去那样的,很丑陋的程序,很羞涩的软件,尽管很慢,但是我把自己的兴趣投入到其中。
常去Linux相关的网站,有空一定要为别人解答自己可以回答的问题。帮助别人,请求别人的帮助。每天浏览Linux的最新的变化,还有就是Unix方面的,多用一些系统,练习一门好的语言,很熟悉C语言。多参与外面的项目,有空去小组,该放弃的要放弃,哪怕它暂时很有利,眼光一定要远。
不要到没有意义地方浪费自己宝贵的时间了。其实,我每天浪费的时间有很多,这些时间完全可以用来学习的。而且可以学的很好的,耐的住寂寞的人才最有可能成功。
我们要跟上世界的脚步,我们就要和世界上不同的人联系和学习。
我们要跟上勤奋的人,我们也要更加的勤奋才可以。
扩展自己的知识范围和眼见,思想要超越,思维要灵活,毅力要强,干一件有意义的事情就不应该放弃,把它干的最漂亮。

2008年8月11日星期一

git使用

最近,有人参与我那个项目了,尽管过去对git有一些学习,可是如果不用的话,很快就忘记了。
一边实践,一边再把一些简单的记录下
有人改动了,http://repo.or.cz/w/gocoso.git所以我把我的电脑上的也更新一下
用这个命令git-pull git://repo.or.cz/gocoso.git
在你的项目的目录下,你改变了一些,而后想把这些改动上传到http://repo.or.cz/w/gocoso.git
你直接用 git push git+ssh://Gaowei@repo.or.cz/srv/git/gocoso.git master
会显示这Everything up-to-date其实你还没有真正的上传,
你要用git-commit -a -m "你添加的注释"而后再用刚才的命令才成功了。
你要添加一个新的文件的时候,要要用git-add命令而后用git-commit -a -m然后你在git push git+ssh://Gaowei@repo.or.cz/srv/git/gocoso.git master好了基本的操作就是这些了,还有很多复杂的,以后应该可以用的到,以后在添加吧!

2008年8月8日星期五

关于进程

/opt/Kingsoft/WPS Office 2005 Professional
大概是我忘记写了,还是被上面这句话给代替了呢?
我先把自己的一些想法的写出来
进程是程序的执行的过程,是在内存中占据的资源和消耗的资源。创建进程就是为了让很多程序同时执行,这样就并发执行了,感觉上是同时运行多个软件的程序。
我应该从这几个方面写,
1.从操作系统的角度
由程序段,数据段及进程控制块三个部分构成一个进程的实体。
进程是程序的一次执行;可以和别的计算并发执行的计算;可定义为一个数据结构及能在其上进行操作的一个程序;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
进程有五个基本特征:1.动态性;2.并发性;3.独立性;4.异步性;5.结构特征。
进程的三个基本状态:1.就绪状态;2.执行状态;3.堵塞状态。而好多的系统又添加了新状态,终止状态,挂起状态。
而很多关于进程的信息存储在PCB,当OS是要根据PCB来对并发执行的进程,进行控制和管理的。
在OS/2中每一个进程属于且仅属于一个会晤,而以进程作为资源分配的基本单位,系统为每一个进程规定了一个唯一的16位进程标识符(PID),并配置了一个任务数据区PTDA(Pertask Data Area)。


2.从Linux内核代码的角度

3.从Freebsd的内核代码的角度

4.从进程的应用

2008年8月6日星期三

软件开发(2)

永远不要以为你知道用户想做的一切事情。
在软件开发(1)里面写了很多关于软件的编写,但是软件的开发不仅仅是在于设计,而且编写的过程也是很重要的,还有就是团队的重要性,没有一个好的团队是不能编写大型的软件的,或者是很难的。还有就是要进行调试,修改bug也很重要。
在这几方面注意,才可以开发出不错的软件。
好好学懂一门编程语言,尽可能的去精通它,现在就要确定自己的目标,那样就更容易前进了,还有就是多交流,那样学习的更快。
还有就是不能急于开发而忽略很多细节,尤其是我们现在学习开发的初级阶段。
原来软件的一些小bug也许就会导致很多人丧失生命,其实很多时候是把我们人类变得更加的不可思议了,所以自己编写自己的软件的时候一定要好好的编写,不要马虎,好好的调试,把文档写好,写详细。我们的生活中有很多我们看不到的软件在运行着,所以软件开发这是一条不错的道路。
程序一般是编写,编译和运行。但是细节问题有很多,今天就简单的介绍一些,而不涉及过多的细节问题。
a.out的意思是assembler output,即汇编输出。
系统为正常使用提供的程序,包括用于程序开发的工具,都可以在目录/usr/bin中找到,系统管理员可以为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/opt中找到。
*头文件*
用C语言及其他的程序设计语言进行程序设计时,我们要用头文件来提供对常量的定义和对系统及库函数的调用的声明。对C语言来说,这些头文件几乎总是在/usr/include目录及其子目录下。那些依赖于特定的Linux版本的头文件通常可在目录/usr/include/sys或/usr/include/linux中找到。调用C语言编译器时,我们可以使用-I标志来包含保存在子目录或者非标准位置中的include文件。用grep命令搜索包含某些特定定义和函数原型的头文件是很方便的。
*库文件*
库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。他们通常由一组相互关联的函数组成并执行某项常见的任务。标准系统库文件一般存储在/lib和/usr/lib目录中。.a代表的是静态函数库。.so代表的是共享库。静态库,也称作归档文件(archive),按照惯例它们的文件名都以.a结尾。用ar程序和gcc -c命令对函数分别进行编译。静态库的一个缺点是当我们同时运行许多个应用程序并且它们都使用来自同一个函数库的函数时,就会在内存中有同一函数的多份拷贝,在程序文件自身中也有多份同样的拷贝。这将消耗大量宝贵的内存和磁盘空间。程序使用共享库时,它本身不再包含函数代码,而是引用运行时间访问的共享代码。当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有闭源共享才被加载到内存中。

2008年8月3日星期日

软件开发(1)

关于软件开发,尽管这俩年来,一直在作关于软件开发有关的事情,但是没有一个让我很满意的。有一个是很不错的,但是我参与的太少,其实相当于没有参与。而后的一直,不是很好。有很多原因,但是我感觉最重要的原因是我们没有坚持下去,还有就是没有团队很好的合作,因为没有一个好的项目主管,大家想怎么干,就怎么干的。而且我感觉我的编程水平很差,其实我不喜欢编程,一点都不喜欢,但是现在不知道为什么对他还是比较感兴趣,或许是因为我有职责了,还有就是义务——我想我该回报小组了。关于以后自身的发展,我在大学里来主要是为了我学到知识,和结交好友,而不是为了以后找个好的工作,学习世界为什么会是这样,学理论,让我明白自然里面的一些现象,让我学会更好的方式来思考。但是以后还是要为生活的呀!工作是必然的选择一个比较好的工作,为了以后自己生活的更好,所以还是要考虑一下将如何更好的发展呢?我应该学一些实用的知识,当然比别人要强,想进好的公司,那就必须比别人更加的勤奋了。
踏踏实实的学,今天这朋友对我说。
我一定要带领大家把这个项目作好,我知道自己的水平,所以要多请教别人,和多和别人沟通,多编写自己的代码,学会更好的编程。
关于软件的开发,这才是这篇文章的主题:
就怎么干的。而且我感觉我的编程水平很差,其实我不喜欢编程,一点都不喜欢,但是现在不知道为什么对他还是比较感兴趣,或许是因为我有职责了,还有就是义务——我想我该回报小组了。关于以后自身的发展,我在大学里来主要是为了我学到知识,和结交好友,而不是为了以后找个好的工作,学习世界为什么会是这样,学理论,让我明白自然里面的一些现象,让我学会更好的方式来思考。但是以后还是要为生活的呀!工作是必然的选择一个比较好的工作,为了以后自己生活的更好,所以还是要考虑一下将如何更好的发展呢?我应该学一些实用的知识,当然比别人要强,想进好的公司,那就必须比别人更加的勤奋了。
踏踏实实的学,今天这朋友对我说。
我一定要带领大家把这个项目作好,我知道自己的水平,所以要多请教别人,和多和别人沟通,多编写自己的代码,学会更好的编程。
关于软件的开发,这才是这篇文章的主题:
就怎么干的。而且我感觉我的编程水平很差,其实我不喜欢编程,一点都不喜欢,但是现在不知道为什么对他还是比较感兴趣,或许是因为我有职责了,还有就是义务——我想我该回报小组了。关于以后自身的发展,我在大学里来主要是为了我学到知识,和结交好友,而不是为了以后找个好的工作,学习世界为什么会是这样,学理论,让我明白自然里面的一些现象,让我学会更好的方式来思考。但是以后还是要为生活的呀!工作是必然的选择一个比较好的工作,为了以后自己生活的更好,所以还是要考虑一下将如何更好的发展呢?我应该学一些实用的知识,当然比别人要强,想进好的公司,那就必须比别人更加的勤奋了。
踏踏实实的学,今天这朋友对我说。
我一定要带领大家把这个项目作好,我知道自己的水平,所以要多请教别人,和多和别人沟通,多编写自己的代码,学会更好的编程。
关于软件的开发,这才是这篇文章的主题:
最近看了,一本书《软件创新之路》原名是《THE INMATES ARERUNNING THE ASYLUM》作者的网站是www.cooper.com总结如下
一,计算机正在“入侵”我们的生活,而且将会有越来越多的人使用他,其实是使用他里面的软件来帮助我们来用硬件的智慧,因为一般人是不够聪明的,所以聪明人就会帮助他们就开发了软件,但是聪明人开发的软件并一定适合我们每一个人,而且他们聪明,还有比他们更聪明的人,所以我们在不断的使用着软件不论你是聪明还是一般人。我们要和电脑要进行交互,也就是说是人和机器进行交互。所以我们离不开软件了,但是如何使得软件更适合人类用呢??这就是软件设计的事情了。
二,我们这些年轻的小伙子,正在精力充沛的学习软件设计和开发,如果学习的方向就不对,以后开发的软件就更加的晦涩了,让人更加的难用了,所以要学好它!至于我们如何学好呢?现在只是学习最基本的知识,并且熟练地把握它们的用法,还是认识考虑软件的正真的用途呢?我想我应该采用的是后者。所以现在,我带领一些人编写自己的软件,并且让我们这些开发软件本身的人用,体验自己的软件用处,和以后设计要更加的人性话更符合客户的要求。
社会的现实总是有英雄豪杰,就有残兵败将;有亿万富翁,就有失业贫民;公司也是如此,成功者少,失败者多;软件则是得心应手的少,晦涩难用的多。
三,谈一谈专业的:
软件设计应分为俩部分:编码设计与交互设计。
社会在不断地发展,让我们的思想与行动都跟上时代的步伐吧!
人们是作信息技术的奴隶,还是成为信息技术的主人。“很多人不能很好的利用身边的资源”
你可以把所有的商人分为俩大类:一类将会控制高技术,一类将会很快关门歇业。
满意的软件是围绕用户而创建的,并能提供自然的,非常好的,强有力的经验。而大多数软件却是围绕程序员而建造的,他们猜测用户的需求,轻率地偏爱某些功能,并且在格式上沿用陈旧的风格。所以我们编写软件的时候要时刻地注意。
信息时代之谜,其实一也没有什么秘密,但是我们很多人没有去思考,也懒得思考,否则我们将会一直处于思考状态了,因为太多的高科技的产品在我们的身边了。很多高科技里面用到了软件,就是说软件和现在大多数的电子产品结合了,之所以是电子产品,因为他们里面有软件。也就是说很多东西里面其实是有软件的,只是有时我们没有感觉到而已。如,电子表,数码相机,汽车里面的很多仪器,银行里的取款机等等,还有很多的东西,我们的很多东西,都要让那些机器聪明一些,那就要程序员把自己的一部分的智慧变成代码而后让机器执行,由用户操作。当然程序员不是最聪明的不可能把所以的智慧给软件,更软件更没有感情和思维,他不会考虑的,只是执行任务。所以自然会有很多人不会使用软件或者不能很好的使用,尽管程序员费尽心思。而且软件本身有时也有很多的缺点,让我们操作起来将会更加的吃力甚至导致我们生活不适,更有甚是使得我们产生重大失误。
当你照镜子时,就容易看到自己的美貌而没有注意到瘤痣。
要想成为一个好的程序员,必须与电脑的本性和需要产生共鸣!
解决问题的关键是交互设计。
哎!每天还是胡思乱想啊,太懒了,你想一想还有多少人处于贫困之中呢?
认识的摩擦,奇迹并不在于熊跳得好坏,而在于熊一直在跳。
软件创新的全部进程都包括设计,包括从选择编程语言到确定产品包装颜色的各种方法。在这个漫长的进程所包括的方方面面中,没有哪个方面比编程本身需要更多的设计。程序员要在这个进程的每个阶段作出设计决定。程序员必须决定每一个过程与其他过程彼此将如何调用,信息和状态将如何共享,如何存储,如何改变,它的有效性将如何保证。所有这些决定,以及成千上万的这类决定,全是由设计决定的,每一步的成功都取决于程序员用经验和裁决承诺的能力。
软件开发遵循帕金森定律(Parkinson's Law):工作将膨胀填满分配给它的时间。
写坏的软件比写软件更昂贵。
在信息时代,最昂贵的有用之物不是建构什么东西的代价,而是你没有建构什么而失掉的机会。建构的失败意味着你没有作成功。
最昂贵的程序是它只是运行一次,最廉价的程序是它可以运行上百亿次。软件经济学就呈现不可思议的翻转,其中最廉价程序要支配那个最昂贵的程序的编写,而最昂贵程序也要支配那个最廉价的编写。好的程序员要花大量的时间和精力进行设置,以便编写一个大的程序。在编写一系列产品代码之前,仅仅设置编程环境就要花好几天时间。必须选择合适的库,必须定义数据,必须对存储和检索子系统进行分析,定义,编码和测试。
在长期运行中,没有适当控制的软件编写要比快艇比赛与吸毒嗜好都更加昂贵。
浏览器的工作方式,它不会把人们领向讨厌的安装过程。WEB的组织就像某个集权制的团体,通过中央电脑命令来控制无效能的桌面机器的行动。
微软,微软只作很少设计或者没有设计,它的产品在使用户感到受愚弄方面是出名的。它们在给予人们良好的价值与健壮的功能集方面也是出名的。几乎没有其他公司能像微软这样提供全面的解决方案。没有多少用户对微软是忠诚的。微软有成熟的技术和极好的商务,这使它在短期内弥补了缺乏设计的不足。几乎所有高科技产品的可期望平均水平仍然处于微软的标准,尽管他们的工作人员投入了全部智慧,诚心诚意,以及艰苦努力!
把自己擅长的方面做到最好,尽可能的多占领这个市场。
软件更像一座桥而不是一座大厦,尽管它是在高科技的微处理器中运行的,但它的使用与操作也必须由普通的人类来完成。电脑:惊人的快,无差错,理性的,无感情的,不会推理,顺序的,可预测,无道德,愚蠢。人:惊人的慢,爱出错,感性的,有感情的,会推理,随机的,不可预测,有道德,聪明。
程序员——逻辑人——总是往左边走;用户们——普通人——总是往右边走。
好的程序员知道怎么去写程序,而一个优秀的程序员知道怎么去重复使用程序。
不应按照问题生成时的同一思维方式来解决该问题。
编写软件一定要选择好一个角色,而且是有名字的角色。为一个人而设计。而且是用户角色不是买方角色。如果你打算设计基于软件的,使用户满意的产品,你必须相对精确地了解那些用户是谁,这就是角色所扮演的人物。下一步是尽可能地设计出功能强大的产品,为此,你需要更多地了解用户的目标。
人们还不能跟上20世纪的技术的发展。
让软件变得彬彬有礼。软件要为效能而设计,为人而设计。
把使任务具体化而采用的工具称为“脚本提纲scenario“。较少的代码意味着复杂性减少,差错bug不多,非法交互机会极少,以及容易维护。
一定要把设计放到首位,那样你的工作将会很顺利,1,设计;2,编写程序;3,调试错误&&用户测试;4,运行。
与微软竞争,你要把握他的弱点,他的产品开发过程中,编程在交互设计之前。
关于编写的进度,要有一个长远的观点,要有责任感,要保证足够的时间,要把握控制权。
前期制作投入的是时间,节约的是金钱,提高的是获得最后成功的可能性。
设计师们需要以充分的完整性和详尽的细节编写,整理,支持,概述他们的方案,这样程序员才可能信任这些方案,并且真正地以其为蓝图去编写代码。必须充分描述各种情况下的细节问题,好让开发者对方案的生命力有充分的信心,相信它能经得起实际应用的考验。写好的设计书,就像一个战斗计划。每一个人都知道自己的那一部分,知道什么是关键的问题。所有的人可以同步,协调地运作,来构造一个以同一特定用户——角色为目标的产品。
商业格言“没有落到纸上的东西都是不存在的”。
随着网络的发展,低技术市场的大批用户,会跳到便于使用的产品这里来。这些人由于网络可以简单地做简单的事而被吸引。同样的这些人,也会被设计优良的产品所吸引,由于这些产品可以简单地作一些复杂的事情。

2008年7月25日星期五

学习kernel网络体系结构(3)

尽管,现在开始学习内核,我感觉自己的基础还是很不好的,没有进行一些系统的学习,而且基础部分也是七零八散的。没有把过去学到运用起来。所以现在还是以学习基础为主,不要好高骛远了!
这次主要写的是关于net的也就是说很多函数在dirvers/net/下还有在net/core/下
除了字符设备和块设备,网络设备是Linux内核中的第三类适配器。他们在设备文件系统/dev/中没有表示,这就意味着不能通过简单的读写来操作来访问他们。网络适配器不能被邦定到单个进程,他们运行在内核中并且独立于各用户进程[RuCo01]。
顺便添加几本好的书哦![RuCo01] Alessandro Rubini and Jonathan Corbet. Linux Device Drivers. Sebastopol, CA: O'Reilly & Associates, 2d ed., 2001. Online version at http://www.oreilly.com/catalog/linuxdrive2/index.html. (Visited on January 10, 2004.)
[BBDK+01] Michael Beck, Harald Böhme, Mirko Dziadzka, Ulrich Kunitz et al. Linux Kernel Programming. Boston: Addison-Wesley, 3d ed., 2002.
[BoCe00] Daniel P. Bovet and Marco Cesati. Understanding the Linux Kernel. Beijing and Cambridge, MA: O'Reilly, 2000
有空要看看哦!
我在include/linux/netdevice.h 这个目录下看net_device结构,此结构是内核中的所有网络设备的基础数据结构。它不仅包含网络适配器的硬件信息(中断,端口,驱动程序函数等等),还包括面向更高层网络协议的网络设备配置数据(IP地址,子网掩码等)。其中包含了大量的函数指针,更高层协议通过它们的全局名称来调用它们,随后驱动程序的硬件相关方法被各网络设备调用。

我认为还是先大体浏览一边而后在进行,认识细致的读和理会,它们中的每一个数据结构的意思都要明白和了解。

现在,大体把其中的主要的部分列举,它们中有网络设备的通用字段;硬件相关字段;网络层上的字段。Linux内核中的所有网络设备都被一个线性表连接起来。
网络设备的注册与注销,哦,drivers/net/net_init.c这个文件竟然在2.6.26中没有找到。
MAC协议(FDDI,HIPPI),难道是媒体介质访问控制(Medium Access Control,MAC)协议,应该看看了。
网络设备的开启和关闭,相关代码在net/core/dev.c下,同样,创建和寻找网络设备的代码,还有为状态改变而设计的通知链,在网络设备上进行传输,网络设备中的初始化网络适配器。
分配系统资源的帮助者函数
request_region() , release_region() , check_region()在kernel/resource.c下
request_irq() , free_irq()在kernel/irq.c下
request_dma() , free_dma()在kernel/dma.c下
但是,打开和关闭网络适配器,传输数据,包传输过程的问题,运行配置,适配器相关的ioctl()命令,网络设备的统计信息,适配器层次的多播支持,的主要函数在drivers/net/isa_skeleton.c下

sctp协议

几个相关的网站
http://www.ibm.com/developerworks/cn/linux/l-sctp/
http://www.ietf.org/
你应该下载相关的,软件才可以用。
http://sourceforge.net/projects/lksctp
他的相关的文档
http://www.ietf.org/rfc/rfc2960.txt
在以后的通信领域里面应该会比较多的应用sctp协议。
以后,看看,现在还是看一些简单的!
The Stream Control Transmission Protocol (SCTP) is a new IP transport protocol, existing at an equivalent level with UDP (User Datagra Protocol) and TCP (Transmission Control Protocol), which provide transport layer functions to many Internet applications. SCTP has been approved by the IETF as a Proposed Standard [1]. The error check algorithm has since been modified [2]. Future changes and updates will be reflected in the IETF RFC index.

2008年7月24日星期四

学习kernel网络体系结构(2)

尽管,看过了,但是还是不能深刻的记忆和理解,我感觉只有一步一步的实践了之后,你才会正真的理解其中的奥秘。我再次,重新看。Linux网络实现的灵活性和高效性的一个主要因素是缓冲体系结构,它管理了网络报文——所谓的套接字缓存(socket buffer) ,skb。
一个套接字缓存由俩部分组成:报文数据和管理数据。

看了这个图,我们将分析他们中的一些具体的参数。
我们要明白其中的指针指向的位置。

其实,内容很多,我们还是简单的了解一些,而后多读源代码,现在把一些代码粘贴,看看,那些和图里面是如何对应的。
自 2.6.22 版的核心開始,sk_buff 結構變更

struct sk_buff_head {
/* These two members must be first. */
struct sk_buff *next;
struct sk_buff *prev;
__u32 qlen;
spinlock_t lock;
};
但是,下面的和以前一些版本有些变化。
struct sk_buff {
/* These two members must be first. */
struct sk_buff *next;
struct sk_buff *prev;

struct sock *sk;
ktime_t tstamp;
struct net_device *dev;

union {
struct dst_entry *dst;
struct rtable *rtable;
};
struct sec_path *sp;

char cb[48];

unsigned int len,
data_len;
__u16 mac_len,
hdr_len;
union {
__wsum csum;
struct {
__u16 csum_start;
__u16 csum_offset;
};
};
__u32 priority;
__u8 local_df:1,
cloned:1,
ip_summed:2,
nohdr:1,
nfctinfo:3;
__u8 pkt_type:3,
fclone:2,
ipvs_property:1,
peeked:1,
nf_trace:1;
__be16 protocol;

void (*destructor)(struct sk_buff *skb);
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
struct nf_conntrack *nfct;
struct sk_buff *nfct_reasm;
#endif
#ifdef CONFIG_BRIDGE_NETFILTER
struct nf_bridge_info *nf_bridge;
#endif

int iif;
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
__u16 queue_mapping;
#endif
#ifdef CONFIG_NET_SCHED
__u16 tc_index; /* traffic control index */
#ifdef CONFIG_NET_CLS_ACT
__u16 tc_verd; /* traffic control verdict */
#endif
#endif
#ifdef CONFIG_IPV6_NDISC_NODETYPE
__u8 ndisc_nodetype:2;
#endif
/* 14 bit hole */

#ifdef CONFIG_NET_DMA
dma_cookie_t dma_cookie;
#endif
#ifdef CONFIG_NETWORK_SECMARK
__u32 secmark;

#endif

__u32 mark;

sk_buff_data_t transport_header;
sk_buff_data_t network_header;
sk_buff_data_t mac_header;
/* These elements must be at the end, see alloc_skb() for details. */
sk_buff_data_t tail;
sk_buff_data_t end;
unsigned char *head,
*data;
unsigned int truesize;
atomic_t users;
};
套接字缓存是用来定位和管理一个报文在内核中被处理的整个周期的。
以上的代码都是在include/linux/skbuff.h 里面,有空在好好的看看其他的。
struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。
这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。 L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。由于在缓冲区的头部 添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve来完成这个功能。协议栈中的每一层在往下一层传 递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。
skb_reserve同样被设备驱动使用来对齐接收到包的包头。如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2的头部只有在 网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做, 可以节省CPU时间。
http://hi.baidu.com/zkheartboy/blog/item/2dd5207a28eb2fee2f73b355.html不错哦!
Linux内核为我们提供了很多函数来操作套接字缓存,如:1.创建,释放和复制套接字缓存 2.操作sk_buff结构里的参数和指针 3.管理套接字缓存队列
而这些函数一般在net/core/skbuff.c 和include/linux/skbuff.h函数中。

进程fork

学习了一段时间进程,用fork()函数把原来的进程,变为俩个进程,其实就是fork()创建了一个新的进程,新进程返回"0",原来的进程继续执行,返回一个新的PID。
在man手册中说fork create a child process
SYNOPSIS:梗概
#include
#include
pid_t fork(void);
看这是什么呢?pid_t是在types.h这个文件下的
pid_t Used for process IDs and process group IDs.
而fork()函数在unistd.h下定义了,而且还有 pid_t vfork(void);

DESCRIPTION: fork() creates a new process by duplicating the calling process. The new process, referred to as the child, is an exact duplicate of the calling process, referred to as the parent, except for the following points:
SEE ALSO
clone(2), execve(2), setrlimit(2), unshare(2), vfork(2), wait(2), capa-
bilities(7), credentials(7)
也就是说我们也要看这些相关的函数,才可以更好的理解和运用fork()函数。
进程是正在运行的程序,其实他是一个运行着一个或者多个线程的地址空间和这些线程所需
的系统资源。每一个进程将会被分配一个PID。进程有自己的栈空间,用于保存函数中的局>部变量和控制函数的调用与返回。进程还有自己的环境空间,包含专门为这个进程建立的环
境变量。进程还必须维护自己的程序计数器,这个计数器用来记录他执行到的位置,即执行
线程中的位置。
Linux进程表就像一个数据结构,它把当前加载在内存中所有进程的有关信息保存在一个表>中,其中包括进程的PID,进程的状态,命令字符串和其他一些ps命令输出的各类信息。每>个进程都是由一个我们称之为“父进程”的进程启动的,被父进程启动的进程叫做子进程。系
统运行的第一个进程是init进程启动的,它是其他所有进程的祖先进程。
Linux调度器以进程的优先级为基础来决定运行哪个进程。
等待一个进程用wait()
子进程终止时,它还与父进程之间的关联还会保持,直到父进程也完全结束或者是调用wait
才告结束。因此,在进程表中子进程不会立刻被释放。虽然子进程的不再运行,但是它仍然
存在于系统之中,它的退出码还需要保存起来以备父进程今后的wait调用,这时它将成为一
个死进程或者是僵死进程。
* The child has its own unique process ID, and this PID does not
match the ID of any existing process group (setpgid(2)).

* The child’s parent process ID is the same as the parent’s process
ID.

* The child does not inherit its parent’s memory locks (mlock(2),
mlockall(2)).

* Process resource utilizations (getrusage(2)) and CPU time counters
(times(2)) are reset to zero in the child.

* The child’s set of pending signals is initially empty (sigpend-
ing(2)).
* The child does not inherit semaphore adjustments from its parent
(semop(2)).

* The child does not inherit record locks from its parent (fcntl(2)).

* The child does not inherit timers from its parent (setitimer(2)
alarm(2), timer_create(3)).

* The child does not inherit outstanding asynchronous I/O operations
from its parent (aio_read(3), aio_write(3)).

The process attributes in the preceding list are all specified in
POSIX.1-2001. The parent and child also differ with respect to the
following Linux-specific process attributes:

gdb调试

今天,学习gdb调试,每一天都要有自己的计划。
在用gcc编译的时候就应当添加-g这个选项的。比如:$ gcc -g -o useupper useupper.c
然后你就进入到了(gdb) 你就可以输入命令了,如输入list
当然,我们一般还有设置一些断点,看看我们的程序运行到那里有什么问题,用break命令。(gdb) help break就可以看到他的详细信息了。然后当然用到next和step的命令了,他们的对比如下:
(gdb) help next
Step program, proceeding through subroutine calls.
Like the "step" command as long as subroutine calls do not happen;
when they do, the call is treated as one instruction.
Argument N means do this N times (or till program stops for another reason).
(gdb) help step
Step program until it reaches a different source line.
Argument N means do this N times (or till program stops for another reason).
我们也可以不一步一步用next和step的命令执行我们的代码,而是要直接执行到n行为止,那我们就用until命令吧!用print命令可以查看变量的值。有时可用finish继续执行直到目前的函数结束。
(gdb) help finish
Execute until selected stack frame returns.
Upon return, the value returned is printed and put in the value history.
命令backtrace和bt和where是一样的
(gdb) help bt
Print backtrace of all stack frames, or innermost COUNT frames.
With a negative argument, print outermost -COUNT frames.
Use of the 'full' qualifier also prints the values of the local variables.
我们也可以用display命令告诉 gdb,在每次程序停止在断点位置时自动显示数组的内容。
(gdb) commands我们用这个命令可以修改断点设置,不在断点处停下而是显示,然后继续执行。
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>cont
>end
这里还可以设置其他的一些,如为了打补丁,改变变量用set variable 变量
而cont命令是
Continue program being debugged, after signal or breakpoint.
If proceeding from breakpoint, a number N may be used as an argument,
which means to set the ignore count of that breakpoint to N - 1 (so that
the breakpoint won't break until the Nth time it is reached).
我们可以用info查看一些信息,比如说查看断点及display命令的内容。
我们可以用disable来禁用我们过去的设置。
其他调试工具:
ctags,cxref和cflow等就是一些静态分析程序,他们可以通过源文件提供有关函数调用和函数所在位置的有用信息。prof和gprog等就是一些动态分析程序,他们提供的信息包括已经执行了哪些函数以及这些函数的执行时间。

2008年7月23日星期三

C语言

EOF ( end of file 文件结束标记 )

exit(int Code)中的Code是子进程交给父进程的退出码,父进程由此可以判断子进程的工作状态,比如 nmake(或make,项目管理程序)和cc(或cl,C编译器)的关系, cc就是make的子进程.如果编译成功,cc就用exit(0),父进程make得到这0之后,继续 做后面的事,如果编译失败,cc就用exit(-1),父进程make得到这个-1后,立即停止项目管理,让程序员查错.不管exit的参数是什么,只要调用就一定退出。

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。

枚举的说明与结构和联合相似, 其形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数],
} 枚举变量;

2008年7月22日星期二

学习kernel网络体系结构(1)

最近在看The Linux Network Architecture其实这本书的名字很长的我就简写了。
学习内核,文件系统很重要,因为Linux内核中几乎所有项目都是通过文件系统接口加以处理的。
内核分为:整体式内核,微内核。
Linux是采用整体式内核的,但是2.0开始把某些功能变成了模块;可载人内核也可移出内核。
模块化的好处:接口的定义会始终如一。
在linux-2.6/net的目录下有很多关于网络方面的源代码,在linux-2.6/Documentation/networking目录下也很多的相关的文档是不是也要读一读呢?应该的,至少在暑假期间把这些都看一遍的。
[RuCo01] [BBDK+01] [BoCe00]这些资料应该看看。
学习网络,我们应该知道ISO/OSI参考模型,虽然它们现在用的不是很广泛但是对我们理解网络还是很有忙助的。

这边是模型图,但是现在应用比较多的还是TCP/IP,在看看它们的对比。好好观测它们之间的不同,和相同的地方,还有就是TCP/IP的优点。每一层之间的关系,和下一层,还有上一层的关系。

今天,感觉理解了服务和协议。我就简单的介绍一下。
一些预定义的规则控制不同计算机上相同层的俩个实例之间的通信,这些规则被称为协议。
一个层(第N层)向更高的层(第N+1层)提供一个功能集合,这个功能集合被称为服务。
我们也就是要理解同层与同层之间的关系,不同层与不同层之间的关系。
* 应用层 (Application):应用层是个很广泛的概念,有一些基本相同的系统级 TCP/IP 应用以及应用协议,也有许多的企业商业应用和互联网应用。
* 传输层 (Transport):传输层包括 UDP 和 TCP,UDP 几乎不对报文进行检查,而 TCP 提供传输保证。
* 网络层 (Network):网络层协议由一系列协议组成,包括 ICMP、IGMP、RIP、OSPF、IP(v4,v6) 等。
* 链路层 (Link):又称为物理数据网络接口层,负责报文传输。

好!明天继续!

我最近的计划

重要 && 紧急
夯实基础,重点深入
努力学好网络编程,学kernel,尽可地发邮件,参与开源里的项目
和大家一起学习,一定完成现在的任务
坚持!!!!!!
尽管,现在很多人已经放弃了,这次既然已经想作那么就作好,哪怕遇到更多的困难,我想我可以完成的,我可以做到的,不放弃,首先是自己不能放弃自己,然后尽可能让他人也不要放弃,现在就剩下俩个人了,我首先要提高自己的知识水平。正如第一句,夯实基础。
2008年 07月 18日 星期五 17:19:31 CST
今天,在git上注册项目,写需求分析。每天有计划的完成自己的计划,早上是学习和讨论,中午是参与网上的讨论和查找资料,晚上是学习kernel。按期完成自己的计划,不要再浪费自己的时间了!
2008年 07月 19日 星期六 13:18:28 CST
需求分析,没有写好,继续完成。看看文件系统,便于明天早上的讨论,练习进程间的通讯,编写C/S模型。好一步一步来!

gdb的学习

进程的总结

网络的学习

每天要不断看Linux方面的新闻,当然是去那些官网看,就是那些英文的网站,你是一流的人才

还有就是学关于认证里面的知识,系统的学习。

——————————————————————————————————————————————
重要 && 不紧急
扩展知识面
提高英语应用能力——和外国人沟通和英语专业的学习
为了明年的google summer of code准备
今年的认证考试,想,看其中的知识点,成为Linux的高手!

——————————————————————————————————————————————
不重要 && 紧急
写有一些生活的琐事,把自己的感触记录下来


——————————————————————————————————————————————
不重要 && 不紧急
参与大的项目,因为要学好现在的小的项目,学会更重要的!SSS
刚刚看看8月12日 西安 全天 西安软件园发展中心 西安软件园秦风阁综合楼多功能厅 西安市高新区科技二路68号西安软件园秦风阁综合楼7层
有2008 中国开源软件竞赛 - 开源行动日,看来我要考虑什么时候回家了!

2008年7月21日星期一

写软件需求分析

尽管看了小组里面很多人的软件需求分析,但是我还是感觉稀里糊涂的,我也就只好照猫画虎了,写我的软件需求分析了,但是自我感觉很不好,我们也讨论了可是最后还是不了了之了,而且现在想干的人也没有几个了。我想我会完成的,不论它的好坏,而且我要去吸引更多的人参与。但是,今天突然看到一本软件需求,这不就是我要的吗?
书名是《Software Requirements》 作者是Karl E.Wiegers
看这本书,而后再一步一步开始了写自己项目的需求分析!我写完后将上传到
http://repo.or.cz/w/gocoso.git感兴趣的人看看。先看书这中的重点内容:
IEEE软件工程标准词汇表(1997年)中定义需求为:
(1)用户解决问题或达到目标所需的条件或权能(Capability)
(2)系统或系统部件要满足合同,标准,规范,或其他正式规定文档所需具有的条件或权能。
(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明。
软件需求包括:业务需求,用户需求和功能需求——也包括非功能需求。
(software requirements specification,SRS)
应该避免,(1)无足够的用户参与 (2)用户的需求不断增加 (3)模棱俩可的需求 (4)不必要的特性
(5)过于精简的规格说明书 (6)忽略了用户的分类
必须解决需求中的所有的TBD项。
需求规格说明的特点:(1)完整性 (2)一致性 (3)可修改性 (4)可跟踪性
需求开发可进一步分为:问题获取(elicitation),分析(analysis),编写规格说明(specification)和验证(verification)。
需求分析(requirement analysis)包括提炼,分析和仔细审查已收集到的需求,以确保所以的风险承担者都明白其含义并找出其中的错误,遗漏或其它不足的地方。
由于自己的软件开发经验不是很足,所以我感觉有时还要根据模板来开发,以不断提高自己的水平。
(一个模板)需求过程改进的活动计划
项目:<项目名称>
目标:<成功执行这份计划后希望达到的一些目标。说明业务方面的目标,而不是过程变更方面的。>
成功度量:<描述怎样确定过程变更是否达到了预期要求。>
组织受影响的范围:<说明在本计划中所描述的过程变更带来影响的广度>
人员和风险承担者:<明确谁实施该计划,每个人的角色,及投入时间承诺。>
跟踪和报告过程:<说明怎样跟踪计划中的活动条目进展情况,以及报告其状况结果等>
依赖,风险和限制:<明确对计划成功有帮助或有阻碍的各种外部因素。>
估计所有活动的完成日期:<希望该计划什么时候完成>
活动条目:<为每个活动计划写了3-10个活动条目>

一日是你的用户终身是你的用户。

软件需求规格说明模板
1.引言 1.1目的 1.2文档约定 1.3预期的读者和阅读建议 1.4产品的范围 1.5参考文献
2.综合描述 2.1产品的前景 2.2产品的功能 2.3用户类和特征 2.4运行环境 2.5设计和实现上的限制
2.6假设和依赖
3.外部接口 3.1用户界面 3.2硬件接口 3.3软件接口 3.4通讯接口
4.系统特征 4.1说明和优先级 4.2激励/响应序列 4.3功能需求
5.其它非功能需求 5.1性能需求 5.2安全设施需求 5.3安全性需求 5.4软件质量属性 5.5业务规则
5.6用户文档
6.其他需求
附录A:词汇表 附录B:分析模型 附录C:待确定的问题的列表

根据上面的学习完成了自己软件需求分析,我上传到了http://repo.or.cz/w/gocoso.git
哪位感兴趣,可以去那里下载。

2008年7月20日星期日

我的大二生活!

我的大二生活就在我不知不觉时就度过了,感觉忙碌不是很充实。总结一下,和朋友相互交流一下,想想你们的大学二年级是如何度过的呢?有多少的悲欢和离合呢,或许你有很多喜悦的事情,那就谈谈吧!
我是这样度过的,当还没有开学时,我就到了学校,哦,早到的人比我想象的要多。我感慨一年大学就那样度过了,平淡无奇,还好去冒了次险,不错的一次经历。大二,我还是比较幸运的,我的一个愿望就那样巧妙的实现了,就是去北京,看毛主席,因为他是我崇拜的一个偶像,从他的文章中我学到不少知识。所以有时,机遇是不禁意接地来到我们的身边,首先是你主动去寻找。大二,过得太快,我都不知道我在这一年里做了些什么呢?我终于开始挂科了,大二第一学期,不想作弊还是可以,但是这学期就不行了,我就开始作弊了,我想我不能这样下去了,这不是我,我是一个很老实的一个人啊!看来老实将会在这里让很多事情变得更加的难!努力吧!
再次,感觉到,同样做个好人,有时也是难的,因为他们不相信你是那么的好心的!尽管难,但我还是努力去做个好人,感觉小时候干了坏事,现在应该好好的弥补一下了,而且将来的生活中也难免会干我们很不想干的事情的,甚至是为了自己的利益而危害他人的利益的,但是我不会去干违法的事情的。其实,现在就有很多人早已经那样了,也许你们也是,但是这样的事情我们是无法避免的。我们的社会限制了我们的素质!这段写的不是很好!
好,开讲了。大二了,来到,学校,我就准备去感受一下作小生意了。从小受到商业的熏陶,对商业很感兴趣,也许我以后要走商业这条路了,但是我想了解这个世界,想改变这个世界,所以学习自然科学了。我找了个合伙人作,因为一个人没有多少意思的,买卖还算是可以的哦!转了一点小钱,给大一小生买锁和钥匙链,俩样一块买就比你买一种好。我在买的过程中看到很多人在买,但是他们的产品单一,我的锁也是多种多样的。这是经验,我们家过去的产品就单一,很少赚钱,种类多了就好了,但是要相关,这样同样的客户就很有可能买了,他们的选择也多了。如果,你们其中有人想经商,就多学点吧!在买的过程中,当然,存在我说的“坏事”了,比如,我骗人家我的好,其实我根本就不知道,人家问我是不是这个学校的,我说是(其实我不在咱们学校),让我以后多多关照,我就多多关照。再比如,在有些学校,上女生楼,还是比较麻烦的,但是也难不到我,自有办法,一次,被一个阿姨抓到我的同伙,也就带到了我,只是把我们赶出去了而已。大一新生基本还是比较好说话的,女生有些真的很漂亮,我同伙见到美女就不想走了,不论多少都卖——夸张了下@。当然上楼的办法一般很简单,阿姨也有忙的时候啊!见好就进!打搅N个女生宿舍,在此向你们道歉,有些学校她们的宿舍楼里,大几的也有,有时就冒昧地打搅了不是新生的宿舍了,一般她们是不买的,如果遇上不好说话的还有可能去告你。还记的,吓到一个女生,不好意思,她还穿这睡衣!当然,我在买的过程中还是要干好事的,帮人家搬东西,好像给N个人帮过,就不提了。而且我一般是帮了人家就走了,也不会给人家推销我的产品,原则问题!
当然回到学校,没有给新生买,也给很多人搬过东西,我几乎见了他们还是认识的,但是他们不知道会认识我吗?认识不认识,对我来说不是很重要了!但是,还是有些人,不放心让我帮忙,也许是不需要,估计是假的!好人还是难作哦!
给几个人送过东西,让我同学和朋友感觉到是我在追求某个人呢?随他们去想好了!我给人的光盘不少吧,从上学期到这学期,希望他们好好的利用。那些光盘有些是我刻录的有些是我让人家邮寄的。当然,还送过一些书给一些人,因为那些书对我用处不大了!请不要把我的好心当作什么哦,我并没有太多的想法的!请相信这个世界上有很多好人,尤其是我们没有利益关系的时候,去冒险的那次经历告诉了我很多。
寒假的时候基本就是在看电影中度过,没有好好的学,尽管带回去很多的书,每次我妈都要说我,还好没有拿我的轮滑鞋,因为有太多的雪了!又完成了一件我的小愿望,去和不认识的老师探讨知识。哦,在前面已经详细写了,在这里就不多写了!
大二,总是忙碌的,让我感觉我学的知识很不扎实,从大一我就进了兴趣小组,所以学的比较杂乱了。没有系统地好好学什么,现在我感觉很有必要好好的学一些了,不学不行啊,尽管什么也会一点,但是这一点其实用处不是很大的。接下来的大学生活我就应该专注的学习了!不能人家干什么我也跟这作什么,我不是那样的人,我想把我过去做的不是很完善的东西做得完善些,至少让自己看着舒服一些,那些知识已经很多了,还让我学更多的东西,而且是自己不是很感兴趣的事情,我真的不想那样了,我的朋友,当你看到这些请原谅我的个人想法,不是我不想和大家一起学。其实,我和大家一起学的,我感觉我还是做的可以,实在感谢孔建军!我大学遇到对我最好的人了!
关于作项目,感觉今年除了项目就是项目,大二啊就那么多的项目,哪有呢?会吗?基础还不是很扎实啊!可以完成那些真正的项目吗?了解,这是我的目的,但不是手段。而且关于google summer of code里面的项目真的很大,我的能力就根本完成不了,当然也就没有被人家录取,但是至少我参与了大的,我知道他们是如何了,而且和牛人聊天,用email交流,学到很多的东西,不仅仅是专业的。英文真的要提高,而且有必要专门的学习了!我现在很多时候收到外国的邮件,有些是私人的,我想更好的交流,而且很多网站也是英文的,不懂其中的意思的话,你要花很多时间去找不太好找到的才可以代替,或者就没有。啊哈!要让更多人参与很多人是外国的人,当然你要用英文写了,而且有些网站对中文的支持不是很好甚至不支持。申请在前面也讲了,就不多言了。完了后,再次,放弃,葡萄城的软件大赛,原因是他们是.net的,其实是我们没有时间了,还有就是团队有问题,没有沟通。接下来就是学校的比赛了,周立公C语言大赛,再次的中途放弃,感觉我们团队放弃的原因是由于我,一直很内疚。合作真的有这么难吗?我自我感觉还是很愿意听人家的建议的,可是真的能力有限,重要是没有坚持。但是,我的有一个朋友帮我没有放弃这个比赛,给我一些他的代码,让我很感动,他是宋飞,感谢他了,在此!一个小游戏而已,不仅仅要我理会到了编程的乐趣,还懂得了坚持。所以很感谢他。还有就是为他们抱不平,因为他们的软件我感觉比入选的很多都好,我就和老师争辩了很久,无果,我也很无奈。有时,有些人就是不听你解释,哎!没有伯乐千里马看来也只能先委屈了!
关于女生,他们说我心高,我心里是这么想的宁缺毋滥啊!不急着找吗?我也不是很清楚了,原因就不说了!关于拉女生的手,我承认我拉过N个人的手,但是没有一个是女朋友,倒是有一个我喜欢的。啊哈!一般是由于轮滑,拉一拉手,我感觉现在的人,不论男女拉手并没有什么吗?也不能说明什么,我还是一如既往的我,喜欢助人为乐,不要利用我的好心哦!其实,我以前也坏过的,小心,没有利用到我的好心!但是你们需要什么帮忙尽管说哦!尽管,我有时说话的声音还是比较大的,就那样了!认识了不少的美女,感觉有缘而已,其实我们既然来到一个学校其实都很有缘,所以男生我就认识的更多了,从大一到大四,女生吗?只是大一到大三而已,一般不是很熟。感觉有些美女还是比较傲气的,用我妹妹的话说你们不理我难道还要我主动理你吗?看来追美女就更难了,想要作朋友——普通的朋友,也许就更难了!关于她们,我也不知道要讲什么的好了,希望我认识的女孩们,越来越美。
关于运气,我感觉今天的好运,多数是建军给我的,感谢啊!现在,我们小组剩下的人,就我和他待在这个小组的时间最长了,从一开始到现在,其他的人,有些是断断续续的,有些是晚进的,也有新进的,从小组的没有任何到现在小有名气,我经历了每一步,感受到了每一步。感谢小组其他人的坚持,没有他们就没有小组的今天。现在的我们依然会努力的,把他们优良的传统保持下去。坚持,也许有天就成功了,你甚至都没有想到!大二,一次好运是去北京,参加了一个比赛,虽然比赛的结果不是很好,但是让我从中学到了很多知识!这次细细说说第二次好运,就是见到stallman,详情请看http://xiyoulinux.cn/blog/index.php?s=stallman&submit=,而且有幸一起吃了顿晚餐,更重要的是可以和名师们一起交流。可惜,我一是太激动二是我的英语太差了,故也没有问什么问题,可惜啊!所以我一定要学好英语,为了和更多的人交流。在不能这要丢人了!!!!!下定决心学好!我从此更加爱自由软件了,我早已经删除了windows,用GUN/Linux,真的很好用。尽管我的英语听力也不是很好,但是从简单的几个词里面和他的一举一动就要学到了不少。可贵的是他的执着的精神,爱好奉献,不求名利。很多了!!
哦,没想到,我的大二还是这么丰富啊!还有很多要写呢?不写不行的!已经写了一个下午了!
好,该谈谈我们小组大四的成员了,他们对我也不错,其实,每次吃饭还是把我给叫上,估计是建军的提议吧!和他们吃了好几次饭,让我提前感受了大四离别的气氛了,而后是他们陆陆续续的离开了。去了,我和他们谈论的也不是很多,现在才知道,年龄的差距永远不是问题,而是我们所处的环境,其实我和他们应该是一届毕业的,当然年龄也差不多,但是却不一样了!真正的年龄不是我们的年龄了,而是我们心里的年龄才是我们真正的年龄!我想我会做得更好的!再次感谢他们,我们会一如既往的。从他们那里,我也学到很多很多的东西,比进那些学生会要好很多。而且是我进来的时候,小组才刚刚成立!现在可以取得如此的成绩,真的已经很不错了,看来中国的自由软件开始发展了,而且开源社区的力量是比较大的!有人主动给我们小组邮寄书籍,有人来我们学校讲座,有名师来我们小组!这就是开源,分享自己的智慧。这些都是他们的能力换来的,和更多的人交流,分享我们的智慧,别人给予了我们,我们也应该给予别人更多的,何况现在小组有如此好的基础了呢,我现在还在实验室奋斗着,等待更多的人来到!
关于小组的现状,自我感觉,我们要不断的提高了,利用暑假。否则,临放假时的纳新,有200多人,下学期当如何呢?要更好的发展,当然首先要提高自己。
啊哈哦!啊哈,好,认认真真的学,踏实一些吧!学好,要不看书也要会,才是你基础好了!奥,这就是我的大二了,到此就是这样了!希望对其他人有些鉴戒的地方。

2008年7月18日星期五

一步一步学git

哦,下面有些错误,您要参考的话,还是要认真看完才可以。这样才会成功的,因为我是一步一步写的,连同我犯的错误,都写了!
哦,这是我后来找到的一个视频http://www.youtube.com/watch?v=4XpnKHJAok8
首先您为自己注册个用户,在这里注册http://repo.or.cz/m/reguser.cgi
注意,Public SSH key(s):是你在$ssh-keygen
之后Generating public/private rsa key pair.
Enter file in which to save the key注意这里你一般是回车,当然也可以自己选择一个目录,但是不改变还是比较好找到的。
按照提示输入公匙密钥/密码,生成的公匙默认保存在 ~/.ssh/id_rsa.pub里,这里的就是往Public SSH key(s):里面填的。这样就注册好了。
然后您要到这里http://repo.or.cz/about.html有个create a project,为您自己注册个项目吧!认真的读这个页面的英文,不要急躁哦!
注册完了你将会看到Initiated mirroring. You will be notified about the result by mail.
如果失败的话,你将收到一封这样的邮件,[repo.or.cz] 项目名clone failed
repodir failed with error code 0
看来不是很好注册哦,估计没有找到方法而已,等我找到,写到这里。
如果申请成功就会得到一封[repo.or.cz]项目名 clone completed
Homepage URL:在这里,我起初是写的git://repo.or.cz/项目.py.git
最后改名为http://repo.or.cz/r/gocoso.git,才好了,
http://repo.or.cz/w/gocoso.git !进去后你会发现git他会为你生成的哦!
Mirror URL git://repo.or.cz/gocoso.git
http://repo.or.cz/r/gocoso.git
哦,各位喜欢的话,去看看。
哦接下来就该到应用了。
不错的链接,中文教程http://www.bitsun.com/documents/gittutorcn.htm
http://github.com/johnson/mubs/wikis/how-to-use-git-to-develop
http://wangcong.org/blog/?p=283
这个也可以,但是使得我出了很多的错误http://www.kongove.cn/blog/index.php?s=git
我一边学一边用一边在这里总结,一起学哦!记的看看您装了git了吗?装了就直接看!
我想为我申请的那个项目push一些东西
首先$ mkdir gocoso
$ cd gocoso/
$ git-init-db
$ git-add test.txt
$ git-commit -m "add test.txt"
$ git push git+ssh://用户名@repo.or.cz/srv/git/gocoso.git master:master
哦到这里就出错了。不应该添加:master,到后来才明白,正确的见下面。
Enter passphrase for key '/home/gaowei/.ssh/id_dsa':
error: dst refspec master does not match any existing ref on the remote and does not start with refs/.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git+ssh://Gaowei@repo.or.cz/srv/git/gocoso.git'
应该是还没有创建Push URL吧!而且它Warning: This is a mirrored repository, thus you cannot push into it. Changing the user set will have no practical effect.
哦,在直接注册ssh不行Software error:在考虑一下
原来如此啊!
Project gocoso successfuly set up.
The push URL for the project is git+ssh://repo.or.cz/srv/git/gocoso.git.
原来,你是在注册的时候选择上Push mode.而不是Mirror mode.但是,Repository URL你也一定要填写的,到这里基本就可以了!感觉自己犯了错,还在这里写。啊哈!
这是突然看到有了俩个,一个是http://repo.or.cz/w/gocoso.git
一个是http://repo.or.cz/r/gocoso.git/
哦,但是push的时候还是失败了,这又是为什么呢?
我重新来一遍吧
[gaowei@(none) gocoso]$ git-add test.txt
[gaowei@(none) gocoso]$ git-commit -m "add a test.txt"
# On branch master
nothing to commit (working directory clean)这里不是很明白。
看到下面和上面的有什么区别了吗?这就是错误的原因。
$ git push 接下一行git+ssh://Gaowei@repo.or.cz/srv/git/gocoso.git master
Enter passphrase for key '/home/gaowei/.ssh/id_dsa':
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git+ssh://Gaowei@repo.or.cz/srv/git/gocoso.git
* [new branch] master -> master

我为开源多做些事情!

接触开源,有一段时间了,所以尽自己的能力为开源做些事情。
我现在主要是编写一些wiki,这也许就是web 2.0吧!贡献自己一些力量,传播更多的知识,分享更多的智慧。
我常去的,这是我们小组的wiki,有空我就去看看,有时添加一些知识,你也可以哦!http://www.xiyoulinux.cn/wiki
这个是我刚刚开始加入的,感觉还算可以,但是还是要很多人参与到其中
http://wiki.chinaunix.net/index.php/%E9%A6%96%E9%A1%B5
想学习kernel,所以我认为首先参与到中文内核开发者的团队里面,你有何高见呢?
http://wiki.zh-kernel.org/
我想为这个网站作一些翻译,而且它里面也准备申请google summer of code到时候还是想参与一下他们的项目的,要具体了解一下了,http://www.synfig.org/Main_Page
我常到这里但是做得太少了,讨论的太少了,感觉自己的英文水平真的要好好的提高了
http://www.daniweb.com/
哦,这个开源社区,刚刚起步,我们应该多参与,而且他的创办者来我们学校几次
http://www.zeuux.org/
还有灰狐,的程勇也到过我们学校,应该参与,可是现在我对java不是很感兴趣,现在学好C
http://huihoo.org/
我在申请google summer of code时候的项目就是在这里的,感觉到自由软件里面还真的很需要人才的,我们应该贡献自己的力量的,http://www.linuxfoundation.org/en/OpenPrinting
还有很多,我注册了,现在已经忘了,甚至我都不知道那个网站了,更不要说是名字和密码了。
以后把经常去的,多作些贡献,不好的网站和我作了小贡献的网站记录下,生活要注意细节问题。
好好努力!
我在几个项目在这里http://sourceforge.net啊哈被封了很久,现在又可以上了!
现在,我的项目在git网站了!http://repo.or.cz/啊哈!有空参与哦!
我的项目http://repo.or.cz/w/gocoso.git
好了,在这里添加一些我常去的网站。
http://www.google.cn/ http://www.baidu.com我想您是比较熟悉的了。
这几个是比较好的搜索rpm包的地方http://www.rpmfind.net/等待以后添加了,忘了。
Linux的一些不错的网站:
http://www.linux.org/
http://www.linux-mag.com/
http://www.linuxdoc.org/
http://www.linuxfocus.org/
http://lwn.net/
http://www.mjmwired.net/
== Linux资源 ==*[http://sourceforge.net/index.php 开源软件大厅]*[http://www.tldp.org Linux文档计划]*[http://www.kernel.org Linux内核官方网站]*[http://www.linux.org Linux新闻]*[http://www.freshmeat.net Linux程序下载中心]*[http://www.linux.com Linux.com]*[http://www.linuxwiki.org Linux Wiki]*[http://www.linux-wiki.com Linux-wiki.com]
=== 中國大陸Linux社区网站资源 ===
[http://www.chinaunix.net 中国最大的Linux/Unix技术社区][http://oss.lzu.edu.cn 兰大开源社区]
[http://www.linuxsir.org 黄嘴企鹅]
[http://www.linuxfans.org 中国Linux公社
[http://www.linuxforum.net 中国Linux论坛]
[http://www.linuxedu.net 中国Linux教育网】
[http://linux.chinaunix.net/ 中国UNIX社区-Linux时代]
[http://www.lupa.gov.cn 开源高校推进联盟]
[http://www.linuxdby.com Linux大本营]
[http://www.linuxdby.com 简体版]
[http://big5.linuxdby.com 繁体版]
[http://www.linuxeden.com Linux伊甸园]
[http://www.linuxaid.com.cn 中国Linux技术中坚站][http://www.oldlinux.org/cgi-bin/LB5000XP/leoboard.cgi OldLinux 论坛]
[http://freeway.linuxsir.org FreeWay 自由之路原创文档小组][http://freewill.linuxsir.org FreeWill 自由意志翻译小组][http://gentoo.linuxsir.org/doc/cn/ Gentoo 中文文档集散地][http://lfs.linuxsir.org LFS 中文用户小组]
[http://www.fcitx.org Fcitx 小企鹅输入法]
[http://linux.pku.edu.cn 北京大学Linux俱乐部]
[http://fsa.ia.ac.cn 中科院自动化研究所自由软件协会][http://www.gnome-cn.org 中文 GNOME 用户门户网站][http://linux.hiweed.com 海微 Hiweed-Debian Linux][http://www.linuxdby.com/blog.php Linux Blog][http://wqy.sourceforge.net 文泉驿中文字体计划][http://www.linuxren.org LinuxRen专注与内核][http://www.linuxsky.org Linux天空]
[http://www.linux-ren.org Linux人](Everest老巢)[http://www.linuxfire.com.cn Linuxfire](linuxfire俱乐部)[http://lcuc.org.cn 中国Linux校园联盟](LCUC)[http://www.chineselinuxuniversity.net/ 中国Linux大学][http://www.beijinglug.org 北京Linux用户组]
[http://www.tofree.org 中国地质大学开源社区]
=== 台灣Linux社群網站資源 ===
[http://linux.vbird.org/ 鳥哥的Linux 私房菜]
[http://www.linux.org.tw/ Taiwan Linux User Group][http://blog.linux.org.tw/ Taiwan Linux Blog Center][http://cle.linux.org.tw/ Linux中文延伸套件][http://www.gentoo.org.tw/ Gentoo@台灣]
[http://b2d.tnc.edu.tw/ B2D中文Linux計劃][http://wiki.debian.org.tw/index.php/Main_Page Debian Wiki][http://knoppix.tnc.edu.tw/ Knoppix中文交流網][http://planet.debian.org.tw/ Planet DebianTW][http://moto.debian.org.tw/ 摩托學園討論區]
[http://wiki.tossug.org/ Taipei Open Source Software User Group][http://www.study-area.org/menu2.htm Study-Area][http://www.openfoundry.org/ 自由軟體鑄造場]
[http://www.study-area.org/ Study Area 酷學園][http://mdk.linux.org.tw/ Mandriva(Mandrake)中文使用開發者社群]
=== 香港Linux社群網站資源 ===
[http://www.oaka.org/ 開放系統研用協會]
[http://www.linuxhall.org Linux Hall Online Project 資訊網][http://www.openstandards.org.hk/ 開源標準科技協進會][http://www.openstandards.org.hk/pages/os_article.htm 開源科技雜誌 OSS Journal]
[http://www.hklia.com/ HKLIA 香港 Linux 商會][http://www.hklpg.org/ HKLPG 香港 Linux 玩家網][http://www.linux.org.hk/ HKLUG 香港 Linux 用家協會][http://wiki.linux.org.hk/ OSWikiHK (香港開源維基)][http://elig.linux.org.hk/ Embedded Linux Interest Group][http://gnome.hk/ GNOME Hong Kong]
[http://www.debian.org.hk/ Debian Hong Kong]
[http://www.samba.hk/ Samba Hong Kong][http://freefonts.oaka.org/index.php/HKSCS_install 香港增補字符集 2001] for Linux】

proc文件系统

刚好今天看到,关于proc文件系统
proc文件一般是一种展示特定内核部分相关信息的文本文件。
很多系统开发人员都使用proc文件系统这种可简易以用户模式显示内核相关信息的功能。/proc目录都很容易实现。另外,/proc目录可以动态地注册和注销,于是常常有一些模块用到proc目录。
奇怪:我用ls查看proc显示大小为0:
niutao@niutao-desktop:/$ ls -l
dr-xr-xr-x 137 root root 0 2008-07-17 23:44 proc
而用鼠标右键查看属性却显示:
15,815 items, totalling 896.2 MB
(some contents unreadable)
针对同一个目录proc两个的显示结果为什么会不一样?
究竟那个才是正确的?
/proc目录下的所有文件都是虚拟文件。所以你ls -l看到是0,而且你的时间好像有问题,现在还没有到23:00呢?否则感觉应该是你登录的时间。这也真好说明他是变化的,而其他很多是不变的,当然也有变化的。
个人认为,仅供参考,用鼠标,感觉就像你进到一个房间,你看到的东西,不论是真的还是虚的,你的感觉他有多的就有多大。而你ls -l是在/,好比是你在屋子外,问里面有些什么东西,他们有多大,如果他是虚的当然是0了。如果你在/proc下看就又显示他还是0,可是kcore却是那么大,和鼠标下显示的一样大!应该和这个有关吧!
-r-------- 1 root root 527306752 07-17 20:43 kcore
猜Nautilus可能通过读取文件内容来获取其大小~~那样就是非0了~~

/proc/kcore
This file represents the physical memory of the
system and is
stored in the ELF core file format. With this
pseudo-file, and
an unstripped kernel (/usr/src/linux/vmlinux) binary,
GDB can be
used to examine the current state of any kernel data
structures.

The total length of the file is the size of physical
memory (RAM) plus 4KB.
我们老师的回答是
/proc 文件系统是一种特殊的、由程序创建的文件系统,内核使用它向外界输出信息。/proc 下面的每个文件都绑定于一个内核函数,这个函数在文件被读取时,动态地生成文件的"内容",例如,/proc/modules 列出的是当前载入模块的列表。

Linux系统对/proc的使用很频繁。现代Linux系统中的很多工具都是通过 /proc 来获取它们的信息,例如 ps、top 和 uptime。有些设备驱动程序也通过 /proc 输出信息,你的驱动程序当然也可以这么做。因为 /proc 文件系统是动态的,所以驱动程序模块可以在任何时候添加或删除其中的文件项。

特征完全的 /proc 文件项相当复杂;在所有的这些特征当中,有一点要指出的是,这些 /proc 文件不仅可以用于读出数据,也可以用于写入数据。不过,大多数时候,/proc 文件项是只读文件。

2008年7月13日星期日

最近学习网络编程

最近放假了,所以一直呆在实验室,学习自己喜欢的知识!感觉学到很多的知识,和大家一起分享。
ssh远程登录,ssh 对方主机名@加IP就可以了。scp 命令是远程拷贝文件,scp -r 主机名@加IP:目录 要拷贝到的目录
用scp也可以上传文件,用scp 你要上传的文件目录 登录主机名@IP:要上传到的目录。
还有就是tree加grep过滤,tree |grep pipe或者tree |less然后,用/你要search的关键字,n是下翻N是上翻。
要手动挂载的话,不知道你要挂载的,你可以在/dev/这个目录下看看,用/dev/sd然后tab的键,俩次看看,或者/dev/d或者也可以。
还有就是学习了进程,fork,管道,pipe,和套间字,socket。我用man分别看了他们的作用,还有就是看kernel源代码,了解了他们的一些简单原理,一切重在应用。
正在摸索用ctags,有空大家一起交流。
[gaowei@(none) FreeBSD]$ ls
[gaowei@(none) FreeBSD]$ cd ..
[gaowei@(none) vmware]$ ls
[gaowei@(none) vmware]$
[gaowei@(none) vmware]$

哦,我的vmware,原来freebsd可以,因为安装了freebsd和suse导致二者都不可用了。啊哈,我把他们都删除了,可是ls还是可以用的,但是没有显示了。我有空在来安装freebsd .的很多时候我们是可以解决问题的,但是我们就不想简单去,而是把它抛弃那样反而使得我们更麻烦了,所以我们应该把一些我们不是很确定的问题,保存了,以后说不定就可以解决了。
我会把我最近学习到的网络编程的知识发表在这里的!谢谢!

linux和windows

尽管,我可能对开源的理解还是不是很深刻,但是我感觉很多人对他没有概念,更不要说是自由软件了!我也就不谈开源。我就谈谈Linux和windows,这些我们还是比较熟悉的。我刚开始也是接触的是windows,我还不知道有什么操作系统,我在没有上大学的时候还以为上网就要用windows呢?现在想一想,啊,windows的推广真的深入世界,就算是我们那个小地方用的是它,而且人们就不懂什么是操作系统,也不懂计算机内部的机制,他们上网会暴露些什么自己的隐私。太可怕了,而好用的Linux只是为懂他的人服务着,不过现在好像也在不断的进行推广,为了更多的人用上好的系统。就像我们吃上放心的食品一样,我们知道他是如何生产的,对我们有什么好处等等,可是我们有时就是不知道我们的食品是如何生产的更尤甚是不知道他是的保质期是什么时候,我们吃了对我们有多大的影响,这些食品就向windows和他的下的一些软件。我们不知道他有些什么额外的功能,他也许会监视我们的一些活动呢?反正你很多时候是不知道他在我们的电脑上干了些什么?
有很多人说实用就好了,管他是什么系统呢?可是我们如果用windows一般估计是盗版的而且让你感觉上好像不是盗版,但是你不幸被检测到,他就会天天提示你,您是盗版的受害者。你就会知道哦,我们原来是盗版阿,不过一般是不会遇到这种情况的。再好好想想我们是多么的无知啊,用的系统还要受到别人的监视,也许我们的一举一动人家清清楚楚呢?我们的利益和安全,想想吧!你也许还是会用windows,你说你已经离不开他了,哦,这就是windows的高明的地方,啊哈,你已经是人家的网中鱼了,你还高兴着呢,说:”我用的windows也是free的,不是和你的Linux一样吗?”这些人就高兴去吧,也许这些人还要用windows赚钱和在开发一些别人用的软件,别人也同样不知道,你的软件内部有什么缺点,就算是你想改也没有办法,尽管你懂软件编程,更不可修改他们编写的代码——想按照自己的想法修改一些功能。我们应该有这些权力的,就像我们吃食品,他们为我们加工好,我们想改变他们的问道是没有办法的,那如果我们买的是原材料的话,我们想作什么样的口味是由我们自己的定的,这是多么的好呢?我们很多的人是喜欢自己做饭的不是吗?食堂的饭看得好,可是我们吃的多了就感觉到不是很好吃了,不知道你们感觉到了吗?而且他们放了很多的非自然的食品和调料,很多是对我们身体没有好处的!好吃不一定就是好的,所以实用的东西一不定有用。Linux的好处,你在网上搜索一下,就可以知道他是多么的优秀了,对你的工作将会有多大的帮助,和如何提高你的效率。在搜索一下 windows就知道他们的一些商业的丑闻了。想想看,他们从世界上剥削了多少的利益啊!而Linux为世界创造了多少的财富,估计要超过windows 了。
你没有windows一样和很好的,甚至更好,是肯定更好的!割掉你的windows吧!不要犹豫了,没有什么可以留恋的,除了让我们浪费时间和金钱就没有什么了。你要作的Linux下一样可以完成,甚至更好,不要用Linux来开发的软件而是为了windows哦!好了,你自己选择吧!明智的你,也许还是会干一些傻事的——还用windows!我想我用了Linux后我才懂得了操作系统和软件的一些真正的原理,看到我用的软件的代码,我想怎么改进就怎么改进,我想就是我们的!
啊哈,分享自己的智慧吧!
感觉我讨论的不是开源,其实开源是在我们的生活的细节里!
哦,刚刚看看8月12日 西安 全天 西安软件园发展中心 西安软件园秦风阁综合楼多功能厅 西安市高新区科技二路68号西安软件园秦风阁综合楼7层
有2008 中国开源软件竞赛 - 开源行动日,看来我要考虑什么时候回家了!

2008年6月8日星期日

学习kernel了

今天,进到别人的blog,才发现自己有这个blog,忘记很久了。
现在开始学习kernel了,前一段时间听了陈老师的课,是关于文件系统的,尤其是虚拟文件系统。
我对虚拟文件系统的一些理解,就是把不同文件系统转化成一种你所使用的系统可以识别的文件系统,系统本身就不管你过去是什么样的,只要现在我可以用你,具有应该有的权限就可以了。
至于,如何去看kernel源代码,关于文件系统的方法,我还是没有听的很明白。现在学习了。
学习一定明确自己的方向,然后深入下去,学习自己喜欢的。

time