Xiaobo Sun

Eclipse-Unix http://umlfact.berlios.de/~s_xsun/

我的评论

re: Java Stream Xiaobo Sun 2008-12-16 09:52  
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(System.in));
String s;
while (bufferedReader.read() != -1) {
System.out.println("input something:");
s = bufferedReader.readLine();
System.out.println("input is: " + s);
}
}
======================================
java io 有两种类型的读写方法。

一种是以字节为单位读写的,InputStream、OutputStream(interface) 下面有很多类像FileInputStream、PipedInputStream 等皆继承了上述接口。

另外一种就是你上面提到的以unicode为单位进行读写的方法。 表现为 Reader、Writer、接口,像BufferedReader 就继承了Reader接口。

BufferedReader ****===> 在读取的时候,会先开辟一个缓冲区,把这些数据读到缓冲区,等到满了以后,就直接拿出来。

至于InputStreamReader,****===> An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and translates them into characters according to a specified character encoding.通过这个类可以把这两种方式读取出来的信息相互切换。

system.in ****===> 这是控制台输入信息时读入的管道。她继承PrintStream ,而PrintStream 类 继承了FilterOutputStream 类。这个类实现了OutputStream 接口。
re: Linux 启动 Xiaobo Sun 2008-12-10 20:32  
启动服务

安装完成后,vsftpd是作为一个独立的服务启动,不接受xinetd的管理。系统会自动在Service列表中添加名称vsftpd的服务。启动服务的步骤如下:

  1、Yast→System→System Services(Run level);

  2、在服务列表中选择vsftpd,点击下方的Enable按钮,启动服务,Finish。

  注意,在启动vsftpd时可能会不能启动,有时是因为它所依赖的服务没有启动,如syslog,这时选中syslog,点击Enable按钮。如果还是不能启动,可以重新启动xinetd服务,然后再启动vsftpd服务。
re: pkg-config学习 Xiaobo Sun 2008-10-15 12:15  
CC = gcc
all:
$(CC) `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello
re: Makefile example Xiaobo Sun 2008-10-09 15:08  
如果你要传递变量到下级Makefile中,那么你可以使用这样的声明:
export <variable ...>;

export variable := value
其等价于:
variable := value
export variable

export variable += value
其等价于:
variable += value
export variable
re: Makefile example Xiaobo Sun 2008-10-09 14:07  
看一个例子:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
上面的例子中,指明了我们的目标从$object中获取,“%.o”表明要所有以“.o”结尾的
目标,也就是“foo.o bar.o”,也就是变量$object集合的模式,而依赖模式“%.c”则取模
式“%.o”的“%”,也就是“foo bar”,并为其加下“.c”的后缀,于是,我们的依赖目标
就是“foo.c bar.c”。而命令中的“$<”和“$@”则是自动化变量,“$<”表示所有的依赖
目标集(也就是“foo.c bar.c”),“$@”表示目标集(也就是“foo.o bar.o”)。于是,
上面的规则展开后等价于下面的规则:
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o
试想,如果我们的“%.o”有几百个,那种我们只要用这种很简单的“静态模式规则”就
可以写完一堆规则,实在是太有效率了
re: Makefile example Xiaobo Sun 2008-10-09 13:57  
# macro
GSOAPPATH=../../
CCINCLUDE= -I$(GSOAPPATH)
#CCINCLUDE+= -I$(RESPONSEPATH)
CCFLAGS= -Wall -g
OBJECTS= soapServiceRequestIFSOAPService.o soapC.o stdsoap2.o \
soapServiceResponseIFSOAPProxy.o
# targets
all : server++ client++

server++ : server.cpp $(OBJECTS)
g++ $(CCFLAGS) $(CCINCLUDE) $^ -o $@

client++ : client.cpp soapC.o stdsoap2.o soapServiceResponseIFSOAPProxy.o
g++ $(CCFLAGS) $(CCINCLUDE) $^ -o $@

soapServiceRequestIFSOAPService.o : soapServiceRequestIFSOAPService.cpp
g++ -c $(CCINCLUDE) $^

soapC.o : soapC.cpp
g++ -c $(CCINCLUDE) $^

stdsoap2.o : $(GSOAPPATH)stdsoap2.cpp
g++ -c $(CCINCLUDE) $^

soapServiceResponseIFSOAPProxy.o : soapServiceResponseIFSOAPProxy.cpp
g++ -c $(CCINCLUDE) $^

clean :
rm -f server++ client++ *.o *~ *.swp

.PHONY : all clean
re: TCP: SYN ACK FIN RST PSH URG Xiaobo Sun 2008-10-09 12:38  
其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度.如果从以太网包返回来计算所加的长度,就嫌走弯路了.
另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度.
re: TCP: SYN ACK FIN RST PSH URG Xiaobo Sun 2008-10-09 12:35  
握手阶段:
序号 方向 seq ack
1  A->B 10000 0
2 B->A 20000 10000+1=10001
3 A->B 10001 20000+1=20001
解释:
1:A向B发起连接请求,以一个随机数初始化A的seq,这里假设为10000,此时ACK=0

2:B收到A的连接请求后,也以一个随机数初始化B的seq,这里假设为20000,意思是:你的请求我已收到,我这方的数据流就从这个数开始。B的ACK是A的seq加1,即10000+1=10001

3:A收到B的回复后,它的seq是它的上个请求的seq加1,即10000+1=10001,意思也是:你的回复我收到了,我这方的数据流就从这个数开始。A此时的ACK是B的seq加1,即20000+1=20001


数据传输阶段:
序号  方向      seq ack size
23 A->B 40000 70000 1514
24 B->A 70000 40000+1514-54=41460 54
25 A->B 41460 70000+54-54=70000 1514
26 B->A 70000 41460+1514-54=42920 54
解释:
23:B接收到A发来的seq=40000,ack=70000,size=1514的数据包
24:于是B向A也发一个数据包,告诉B,你的上个包我收到了。B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。
25:A在收到B发过来的ack为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包的大小,就明白,上次发送的数据包已安全到达。于是它再发一个数据包给B。这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包的size(54)填充,即ack=70000+54-54(全是头长,没数据项)。
26:一样的啊
re: # ps -aux |grep sysprocess Xiaobo Sun 2008-07-28 11:09  
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    2)ps -A 显示所有程序。
    3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    4)ps -e 此参数的效果和指定"A"参数相同。
    5)ps e 列出程序时,显示每个程序所使用的环境变量。
    6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    7)ps -H 显示树状结构,表示程序间的相互关系。
    8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    9)ps s 采用程序信号的格式显示程序状况。
    10)ps S 列出程序时,包括已中断的子程序资料。
    11)ps -t  指定终端机编号,并列出属于该终端机的程序的状况。
    12)ps u  以用户为主的格式来显示程序状况。
    13)ps x  显示所有程序,不以终端机来区分。
  最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜