0%

UNP 学习环境搭建

该文章用来记录UNP(UNIX Network Programming)学习环境的搭建过程,使用的系统环境为Ubuntu 14.04 LTS,源码为unpv13e.tar.gz

下载源码

1
$ wget http://www.unpbook.com/unpv13e.tar.gz

解压

1
$ tar -zxvf unpv13e.tar.gz

解压完成后会在当前目录下创建unpv13e文件夹

编译代码得到libunp.a库文件(编译书中的例子需要使用)

1
2
3
4
$ cd unpv13e
$ ./configure
$ cd lib
$ make

在unpv13e 目录下会创建libunp.a文件,将其拷贝到/usr/lib目录下

1
$ sudo cp libunp.a /usr/lib

最后将unpv13e/lib目录下的unp.h 与 unpv13e目录下的 config.h文件拷贝到inc目录下

1
2
3
$ vim lib/unp.h //编辑unp.h 将#include"../config.h" 改为 #include "config.h"
$ sudo cp lib/unp.h /usr/include
$ sudo cp config.h /usr/include

至此编译环境已经完成,测试编译环境可以对intro下的源码进行编译

1
2
$ cd intro
$ gcc daytimetcpcli.c -o cli -lunp

可以顺利编译,环境搭建完成!

Markdown 使用笔记


Markdown是一种语法,其目标是成为一种适用于网络的书写语言。

区块和元素

段落与换行

一个Markdown段落是由一个或多个连续的文本行组成,他的前后要有一个空行,例如一行只包含空格和制表符,则改行会被视为空行。若确实需要换行可以输入<br />标签。

标题

Markdown支持两种标题的语法,类Setext和atx形式。

Setext形式为底线的形式

1
2
3
4
This is an H1 
=============
This is an H2
-------------

Atx形式是在行首添加1-6个#,对应标题1-6阶例如:

1
2
3
# 这是H1
## 这是H2
###### 这是H6

区块引用

Markdown 标记区块使用类似Email 中的 >的引用方式。

1
2
3
> 这里是一个区块引用,
> 自己断行后在每行前面加上 > 符号
> 符号>后面的内容用来表示引用的内容。

列表

Markdown支持有序列表和无序列表。

无序列表使用星号、加号或是建好作为标记:

1
2
3
* Red
* Green
* Blue

等同于:

1
2
3
+ Red
+ Green
+ Blue

也等同于:

1
2
3
- Red
- Green
- Blue

有序列表使用数字接着一个英语句号:

1
2
3
1. Bird
2. McHale
3. Parish

项目列表标记通常放在最左边,但也可以缩进,最多三个空格,项目标记后面则一定要接着至少一个空格或制表符。

1
2
3
4
*   这是一个段落
这是另一行
* 这是另一个段落
这是另一个段落的另一行

如果需要在列表内放进引用,那 > 就需要缩进:

1
2
3
*   一个区块列表内的引用
> 这里是一个引用
> 在列表中

如果需要在列表中防止代码区块,该区块需要缩进两次,即8个空格或两个制表符:

1
2
*   一列表象包含一个列表区块:
<代码写在这里>

可能会在行首出现数字-句号-空白,例如1986. In this year.这时会被误认为有序列表,可以代替为1986\. In this year

分割线

#### 可以在一行中使用三个以上的星号、减号、底线来建立一个分割线,行内不能有其他东西。

1
2
3
4
5
***
* * *
*****
- - -
---------

区段元素

链接

Markdown 支持两种形式的链接语法,行内式和参考式,两种形式。不管哪一种,链接文字都是用[ ]来标记。要建立一个行内式链接,只要在方括号后紧接圆括号,并插入网址链接后面,如果还想加上链接的title文字,只要在网址后面,用双引号吧title文字包起来即可。

1
2
This is [an enxmple](http://example.com/ "Title") inline link.
[This link](http://example.net/ )has no title attribute.

参考式链接是在链接文字的括号后面再接上一个括号,在第二个方括号里面添加用以辨识链接的标记:

1
2
This is [an example][id] reference-style link.
This is [an example] [id] reference-style link. //可以在方括号之间添加空格

然后在文件的任意地方,将这个标记的链接内容定义出来:

1
[id]: http:// example.com/ "Optional Title Here"

强调

Markdown 使用星号()和底线(_)作为强调字词的符号,被 或_包起来的话,会被转换成````Markdownsingle asteriskssingle underscoresdouble asterisksdouble underscores`

代码

如果要标记一小段行内代码,可以使用()`,例如

1
Use the `printf()` function

图片

Markdown 中的图片插入同样支持两种样式:行内式和参考式

1
2
3
4
5
6
行内式:
![Alt text](/path/to/img.jpg)
![Alt text](/path/to/img.jpg "Optional title")
参考式:
![Alt text][id]
![id]: url/to/image "Optional title attribute"

Hexo 使用笔记

Hexo是一个快速,简洁且高效的博客框架。Hexo 使用Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
该文章仅用来做简单的记录,如需具体安装可以参考hexo 官方文档

安装

安装Hexo十分简单,需要先安装Node.js 和 Git 应用。如果已经安装这两个软件,只需使用npm即可完成Hexo的安装。

1
$ npm install -g hexo-cli

建站

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install

指令

init

1
$ hexo init [folder]

新建一个网站。如果没有设置folder,默认在目前的文件夹建立网站

new

1
hexo new [layout] <title>

新建篇一篇文章,如果没有设置layout的话,默认使用__config.yml 中的default_layout 参数代替。如果标题包含空格,需要使用引号括起来。

generate

1
$ hexo generate

生成静态文件。

  • -d, –deploy 文件生成后立即部署网站
  • -w, –watch 监视文件变动

public

1
$ hexo public [layout] <filename>

发表草稿

server

1
$ hexo server

启动服务器,默认情况下,访问网址位:http://localhost:4000/

  • -p, –port 重设端口
  • -s, –static 只使用静态文件
  • -l, –log 启动日记记录,使用覆盖记录格式

deploy

1
$ hexo deploy

部署网站

  • -g, –generate 部署之前预先生成静态文件

clean

清除缓存文件(db.json)和已生成的静态文件(public)

1
$ hexo clean

list

列出网站资料

1
$ hexo list <type>

version

显示Hexo版本

1
$ hexo version 

实验目的:

  1. 熟悉Ubuntu实验环境以及Oslab工作平台;
  2. 熟悉X86模拟器Bochs、GCC编译器,DB调试器;
  3. 初步接触Linux 0.11操作系统

实验仪器:

  1. Ubuntu操作系统
  2. Bochs工作平台
  3. Linux 0.11操作系统源码

相关资料

实验楼操作系统与实践 实验一资料

实验内容

  1. 搭建Oslab工作平台:在用户主目录下启动命令行中断,输入:
1
tar zxvf hit-oslab-linux-20110823.tar.gz #解压缩hit-oslab-linux-20110823.tar.gz文件

安装Oslab

  1. 准备活动:注入:
1
cd ~/oslab #进入用户目录(~)下的oslab文件夹

列出当前目录内容:

1
ls -l  # -l:列出文件的具体信息
  1. 编译内核:切换至”/home/shiyanlou/oslab/linux-0.11”目录,执行:
1
make all
  1. 启动Bochs:切换至”/home/shiyanlou/oslab”目录,执行:
1
./run

启动Bochs,结果如图:

  1. 熟悉Ubuntu和linux 0.11之间的文件交换,切换至”/home/shiyanlou/oslab”目录,执行:
1
2
sudo ./mount-hdc # 将文件系统镜像文件挂载到hdc目录
sudo umount hdc # 卸载hdc目录挂载的文件系统镜像文件

该操作是为了方便对linux 0.11系统中的文件进行编辑,由于Linux 0.11系统中的编辑工具只有vi,使用不方便。所以进行了文件系统镜像的挂载,方便在虚拟系统和实体系统之间进行文件数据的交换。
注意1. 不要再0.11内核运行的时候mount镜像文件,否则可能会损坏文件系统,同理,不应在mount状态下启动0.11内核。
注意2.在关闭Bochs之前,需要先在0.11的命令行运行sync确保所有缓存数据存盘后,再关闭Bochs.

实验分析

  1. 注意命令行所控制的目录,否则会提示错误,例如在oslab目录下执行···make all``便会提示错误,etc..
  2. 调试器还需要熟悉。之前了解过少许GDB调试器的使用,基本忘光。。。还需要继续学习Linux下编程的相关技能。

Question:When A team win,A team’s score plus one,if B team win, B team’s score plus one.
Use MCU51 design a program, set four Button ,When press Button1 A team’s score plus one.press Button2 B team’s score plus one, press Button3 exchanges A with B field,meanwhile A and B score display also exchange.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define WEI P1
#define KEY P2
char code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};

int scoreA = 0,scoreB = 0; //A队,B队分数
void delay(int t) //延时函数
{
int i,j;
for(i = 0;i < t;i++)
for(j = 0;j < 120;j++);
}

void display(int A,int B) //数码管动态显示函数
{
int shi,ge;
shi = A/10; //十位分离
ge = A%10; //个位分离

P0 = 0xff; //消影处理
P1 = 0x01; //给位选
P0 = table[shi]; //给段选
delay(5); //延时显示

P0 = 0xff;
P1 = 0x02;
P0 = table[ge];
delay(5);

shi = B / 10;
ge = B % 10;
P0 = 0xff;
P1 = 0x04;
P0 = table[shi];
delay(5);

P0 = 0xff;
P1 = 0x08;
P0 = table[ge];
delay(5);
}
void keyscan()
{
int temp; //按键扫描临时变量
int t; //数据交换临时变量
temp = KEY;
if((temp & 0x0f) != 0x0f)
{
delay(1);
temp = KEY;
if((temp & 0x0f) != 0x0f)
{
temp = KEY;
temp = temp & 0x0f;
switch(temp)
{
case 0x0e: //第一个键被按下
scoreA += 1;
if(scoreA > 99) scoreA = 0; //A队分数加1
break;
case 0x0d: //第二个键被按下
scoreB += 1; //B队分数加1
if(scoreB > 99) scoreB = 0;
break;
case 0x0b: //第三个键被按下
{
t = scoreB;
scoreB = scoreA; //交换场地
scoreA = t;
break;
}
case 0x07: //第四个键被按下
scoreA = 0; //两队分数清零
scoreB = 0;
break;
default : break;

}
temp = KEY;
while((temp & 0X0F) != 0x0f)
{
temp = KEY;
}
}


}


}

void main()
{
while(1)
{
display(scoreA,scoreB);//数码管动态显示
keyscan(); //按键扫描
}

}

很久之前遇到的问题,pip安装python包时报错如下:

1
UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u258f’ in position 8: ordinal not in range(128)

后来换了easy install也就没有管他了,今天又遇到了这个问题,觉得还是要解决一下的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Exception:
Traceback (most recent call last):
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\basecommand.py", l
ine 215, in main
status = self.run(options, args)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\commands\install.p
y", line 299, in run
requirement_set.prepare_files(finder)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\req\req_set.py", l
ine 370, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\req\req_set.py", l
ine 587, in _prepare_file
session=self.session, hashes=hashes)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\download.py", line
810, in unpack_url
hashes=hashes
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\download.py", line
649, in unpack_http_url
hashes)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\download.py", line
871, in _download_http_url
_download_url(resp, link, content_file, hashes)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\download.py", line
595, in _download_url
hashes.check_against_chunks(downloaded_chunks)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\utils\hashes.py",
line 46, in check_against_chunks
for chunk in chunks:
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\download.py", line
563, in written_chunks
for chunk in chunks:
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\utils\ui.py", line
141, in iter
self.next(n)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\progress\_
_init__.py", line 73, in next
self.update()
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\progress\b
ar.py", line 79, in update
self.writeln(line)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\progress\h
elpers.py", line 68, in writeln
print(line, end='', file=self.file)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\colorama\a
nsitowin32.py", line 141, in write
self.write_and_convert(text)
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\colorama\a
nsitowin32.py", line 169, in write_and_convert
self.write_plain_text(text, cursor, len(text))
File "c:\python27\lib\site-packages\pip-8.1.2-py2.7.egg\pip\_vendor\colorama\a
nsitowin32.py", line 174, in write_plain_text
self.wrapped.write(text[start:end])
UnicodeEncodeError: 'ascii' codec can't encode character u'\u258f' in position 8
: ordinal not in range(128)

此处 得知原因如下

pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码。解决办法是:
python目录 Python27\Lib\site-packages 建一个文件sitecustomize.py
内容写:

import sys
sys.setdefaultencoding(‘gb2312’)

python会自动运行这个文件。

解决方案为在 Python27\Lib\site-packages下建立一个文件sitecustomize.py写入:

import sys
sys.setdefaultencoding(‘gb2312’) #我这样修改后并不可以,修改gb2312为UTF-8后解决