Archive for 10月, 2007

Shell 数组

星期二, 10月 30th, 2007

[ 心情: Neutral ]
转自:http://blog.chinaunix.net/u1/43550/showart_372632.html
bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标。下标可以是整数或算术表达式,其值应大于或等于0。用户可以使用赋值语句对数组变量赋值。对数组元素赋值的一般形式是:数组名[下标]=值例如:
$ city[0]=Beijing
$ city[1]=Shanghai
$ city[2]=Tianjin
也可以用declare命令显式声明一个数组,一般形式是:
declare -a 数组名
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
$ echo ${city[0]}
Beijing
一个数组的各个元素可以利用上述方式一个元素一个元素地赋值,也可以组合赋值。定义一个数组并为其赋初值的一般形式是:数组名=(值1 值2 … 值n),其中,各个值之间以空格分开。
例如:
$ A=(this is an example of shell script)
$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}
this an example script
$ echo ${A[8]}
由于值表中初值共有7个,所以A的元素个数也是7。A[8]超出了已赋值的数组A的范围,就认为它是一个新元素,由于预先没有赋值,所以它的值是空串。
若没有给出数组元素的下标,则数组名表示下标为0的数组元素,如city就等价于city[0]。
使用*或@做下标,则会以数组中所有元素取代[*]或[@]。

好几天没有写了,今天算恢复了吧!

星期二, 10月 30th, 2007

最近真是太忙了,倒是没怎么学习,主要都在忙社团的事儿。还好俱乐部就快成立了,应该可以松口气了吧!
立峰一直跟我说让我当俱乐部的主席,他说自己身体不行(有点牵强哈)。可能的确是这样吧,毕竟立峰人还8错的。等到成立后事情就会轻松些了,也可以弄自己的事情了,呵呵。
总之,现在就要时刻保持高昂的热情,仔细,认真,负责。就是这样!

C语言里的strcmp(char* ,char*) 函数

星期四, 10月 25th, 2007

原型:extern int strcmp(char *s1,char * s2);
用法:#include <string.h>
功能:比较字符串s1和s2。
说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0

开始分析webserver.c的源代码啦!

星期四, 10月 25th, 2007

[ 心情: Neutral ]
[ 状态: Playing ]
今天分析C语言写的webserver.c 的source code,如果不是先分析下别人的代码的话我是在是不知道这个webserver该怎么写。
先研究研究,明白了之后再写一个自己的东西,学习的过程就是这样的。初始的知识都是别人的。

怎么把server返回给client的信息在浏览器中显示出来呀??

星期三, 10月 24th, 2007

下一步的计划就是server可以把返回给client的信息在web browser中显示出来,貌似有点难度哈!
努力

Thank God ,我的第一个socket程序终于fix了

星期三, 10月 24th, 2007

[ 心情: Cool ]
[ 状态: Working ]
第一个socket程序终于写完了,虽然在高手看来很菜而且还有很多借鉴的成分,但这毕竟是俺的第一个socket程序嘛!是用来学习的,哈哈
其实通过这个程序主要是来了解socket编程的大体思路,还需要多多练习呀!
下面我把代码贴出来,虽然难免有贻笑大方的可能,但它对于我确实意义很大,呵呵,见笑了。
server.c
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define SERVPORT 7000
#define BACKLOG 10
main()
{
int sockfd,client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror(”socket 创建出错”);
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),;
if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))==-1){
perror(”bind 出错”);
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror(”listen 出错”);
exit(1);
}
while(1)
{
int sin_size = sizeof(struct sockaddr_in);
client_fd = accept(sockfd,(struct sockaddr *)&remote_addr,
&sin_size);
if(client_fd == -1)
{
perror(”accept 出错”);
continue;
}
printf(”receiving a connection from %s\n”,inet_ntoa(remote_addr. sin_addr));
if(!fork())
{
if(send(client_fd,”Hello,you are connected!\n”,26,0)==-1)
perror(”send 出错”);
close(client_fd);
exit(0);
}
close(client_fd);
}
}
client.c
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#define [...]

socket编程笔记–初识socket

星期一, 10月 22nd, 2007

什么是socket:
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Establish A Socket:
为了建立Socket,程序可以调用socket()函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:
int socket(int domain, int type, int protocol);
domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型: SOCK_STREAM 或SOCK_DGRAM,Socket接 口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值”0″。
Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上”建立一个Socket”意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。
Configure The Socket:
通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过 调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用 bind函数来配置本地信息。
Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind函数原型为:
int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。
struct sockaddr结构类型是用来保存socket信息的:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。
另外还有一种结构类型:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct [...]

ubuntu 7.04 系统 在 evolution里配置gmail邮箱

星期一, 10月 22nd, 2007

[ 心情: Cool ]
[ 状态: Reading ]
今天下午花了很长时间终于把gmail在evolution里配置上了。
下面说下怎么配置吧。
首先、当然是要注册gmail邮箱了(其他邮箱可能成功的可能性不是很大,因为免费邮箱主要都是靠它里面的广告赚钱呢,你装上evolution后就可以不上它的网站了,你说他能干嘛?)
其次、编辑-> 首选项->添加->前进
首选项:
全名项填入名字、电子邮件地址项填入gmail邮箱地址 ->前进
接受电子邮件:
服务器类型添“pop”->服务器添pop.gmail.com->用户明天邮箱地址->前进
接受选项:
->前进
发送电子邮件:
服务器项添smtp.gmail.com ,身份验证类型添PLAIN,记住密码
帐号管理:
用户名项添邮件全地址->完成

找回了msn、注册了gmail、配置了evolution 只为了它!

星期一, 10月 22nd, 2007

[ 心情: Neutral ]
那就是为linux社区翻译些英文文档、杂志之类的东西啦,等待答复……………..

linux文件系统分析

星期日, 10月 21st, 2007

首先声明:
作者:北南南北
来自:LinuxSir.Org
摘要: Linux文件系统是呈树形结构,了解Linux文件系统的目录结构,对于我们驾驭Linux还是有必要的。本文对Linux下比较重要的目录加以解说,以答初学者所说的“杂乱无章”目录结构,给一个简要的说明。
链接:http://www.linuxsir.org/main/?q=node/189
文件系统的组织结构分析,我们能分析什么呢?也就是当我们列/目录时,所看到的/usr、/etc … … /var 等目录是做什么用的,这些目录是不是有些特定的用途。无论哪个哪个版本的Linux系统,都有这些目录,这些目录应该是标准的。当然各个Linux发行版本也会存在一些小小的差异,但总体来说,还是大体差不多。
Linux发行版本之间的差别其实很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同,除此之外,没有什么大的差别; 比如Fedora软件包管理工具是rpm,而Slackware是pkgtool 或installpkg等;
言归正传,我们接着说文件系统组织结构。
/ Linux文件系统的入口,也是处于最高一级的目录;
/bin 基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。做为基础系统所需要的最基础的命令就是放在这里。
/boot Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;
/dev 设备文件存储目录,比如声卡、磁盘… …
/etc 系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;
/home 普通用户家目录默认存放目录;
/lib 库文件存放目录
/lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
/media 即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。这个只有在最新的发行套件上才有,比如Fedora Core 4.0 5.0 等。可以参看/etc/fstab的定义;
/misc
/mnt 这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎么定义了;比如光驱可以挂载到/mnt/cdrom 。
/opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过 ./configure –prefix=/opt/目录 。
/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。
/root Linux超级权限用户root的家目录;
/sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的;我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。
/tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
/usr 这个是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。/usr目录下包括涉及字体目录/usr/share/fonts ,帮助目录 /usr/share/man或/usr/share/doc,普通用户可执行文件目录/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超级权限用户root的可执行命令存放目录,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;还有程序的头文件存放目录/usr/include。
/var 这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log [...]

Recent Posts:
  1. I'm still fighting for a good future
  2. C++内存分配方式(转载)
  3. 详解Java里的堆和栈(转载,exellent!)
  4. A Skeleton in the Cupboard.
  5. Be thankful for what you have