笔记分类
2008年12月8日星期一
嵌入式就业尖端公司
北京亿旗创新科技发展有限公司
北京赛德菱信息技术有限公司
北京微芯力科技
研华科技
北京精仪达盛科技有限公司
北京革新科技有限公司
北京启东微芯科技发展有限公司
北京金一倍科技发展有限公司
清华大学科教仪器厂
亿道电子技术有限公司
深圳市英蓓特信息技术有限公司
深圳市远峰计算机技术有限公司
华恒科技
上海复旦金海博科技有限公司
上海思创培训
成都傅立叶电子科技有限公司
长沙科瑞特电子有限公司
武汉创维特信息技术有限公司
凌阳大学计划
湖南湘潭胜西电子科技有限公司
祥佑数码科技有限公司
风标科技
杭州星晨单片机电子有限公司
2008年12月1日星期一
Linux下文件类型及表示颜色
n 红色:压缩文件
n 蓝色:目录文件 (用d表示)
n 青蓝色:链接文件 (用l表示)
n 黄色:设备文件(/dev目录下)(用b或c表示)
b表示的是物理设备;c表示的是字符终端设备.
n 青绿色:可执行文件(/bin、/sbin目录下)
n 粉红色:图片文件或是socket文件(用s表示)
n 青黄色:管道文件 (用p表示)
# file /dev/hda //查看指定文件的类型
# # find /dev -type b //在/dev目录中查找类型是设备的文件,可以将“b"换成上面的任意类型表示字母,如l,c等。
2008年11月20日星期四
安装arm-elf-gcc交叉编译环境
1.3.1
以ROOT身份进入ubuntu8.04, 将arm-elf-tools-20040427.sh拷贝到 /usr/src 目录下
1.3.2
给arm-elf-tools-20040427.sh增加可执行权限:chmod 755 arm-elf-tools-20040427.sh
1.3.3
执行 ./arm-elf-tools-20040427.sh
提示错误:
tail: 无法打开“+43” 读取数据: 没有那个文件或目录。
gunzip: stdin: not in gzip format
解决办法
tail -n+43 arm-elf-tools-20040427.sh >> 1.tar.gz
tar zxvf 1.tar.gz
这样子你会得到一个usr的文件夹。。
然后: cp -R usr /
如出现提示无法覆盖/local/man,
如下操作:
cp -r usr/local/man /usr/share/
查看 /usr/local/bin 目录下应该有 arm-elf-gcc等文件。
这样我们在宿主机里的交叉编译环境安装完成了。
1.3.4添加交叉编译器的路径:export PATH=$PATH:/usr/local/arm-elf/bin
2008年11月19日星期三
运行shell脚本时 sh,export,source的区别
而export就是解决这个问题用的。在父进程中export A 后,在子进程中就可以使用变量A了。
2. sh+脚本:重新建立一个子shell执行脚本里面的语句,该子shell继承父shell的变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
可以这么理解:打开一个终端程序 = sh = 执行bash命令
3. source+脚本:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
arm-linux-gcc和arm-elf-gcc的区别
而arm-elf-gcc是针对no MMU arm + uclinux的开发环境,kernel使用的是uclinux,硬件是廉价的无MMU的arm芯片。
下载地址:http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/
http://opensrc.sec.samsung.com/download.html
2008年11月18日星期二
数据结构之c语言链表操作(学生信息管理)源代码--xxh
#include "iostream.h"
#include "malloc.h"
#include "windows.h"
#define LEN sizeof( struct student )
//#define NULL 0
struct student
{
int no;
int score;
struct student *next;
};
struct student *head;
int size=0;
void init();
void print_list();
void creat_list()
{
struct student *p1,*p2;
p1 = p2 = ( struct student * ) malloc (LEN);
cout << "\n开始创建成绩表 (学号和分数输入为0时结束添加)\n ";
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
head = p1;
while( p1->no != 0 )
{
size=size+1;
p2->next = p1;
p2 = p1;
p1 = ( struct student * ) malloc (LEN);
cout << "\n学号:";
cin >> p1->no;
cout << "\n分数:";
cin >> p1->score;
}
p2->next = NULL;
print_list();
}
void print_list()
{
system("cls");
struct student *p;
cout << "\n\n----------------------------共" << size << "条成绩记录-----------------------------------\n\n";
cout << "\t学号\t|\t分数\n";
p = head ;
while( p!= NULL )
{
cout << "\t" << p->no << "\t\t" << p->score << "\n" ;
p = p->next;
}
cout << "\n\n----------电气10602班谢小辉 数据结构作业之链表操作(学生成绩表)--------------\n\n";
init();
}
void del()
{
int del_no;
struct student *p1,*p2;
p1 = head ;
cout << "\n\n请输入需要删除记录的学号:";
cin >> del_no;
while( del_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
if( p1 == head )
{
head = p1->next;
size--;
}
else
{
p2->next = p1->next;
size--;
}
print_list();
}
void insert()
{
int insert_no;
struct student *p1,*p2,*p;
p = ( struct student * ) malloc (LEN);
p1 = head;
cout << "\n\n添加新学号:" ;
cin >> p->no ;
cout << "\n分数:" ;
cin >> p->score ;
cout << "\n新记录插入到哪条记录之后?学号:";
cin >> insert_no;
while( insert_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
p2 = p1->next;
p1->next = p;
p->next = p2;
size++;
print_list();
}
void edit()
{
int edit_no;
struct student *p1,*p2;
cout << "\n\n请输入要编辑记录的学号:";
cin >> edit_no ;
p1 = head ;
while( edit_no != p1->no )
{
p2 = p1;
p1 = p1->next;
}
cout << "\n新学号:";
cin >> p1->no;
cout << "\n新分数:";
cin >> p1->score;
print_list();
}
void close()
{
system("cls");
cout << "\n\n\n\n\n\n\t\t谢谢\t电气10602班谢小辉\t2008-10-1 23:00\n\n\n\n\n\n";
}
void init()
{
int t;
cout << "\n\n\n操作列表:\n\t 1.输出成绩表;\n\t 2.增加记录;\n\t 3.删除记录;\n\t 4.修改记录;\n\t 5.退出;\n操作:";
cin >> t;
switch(t)
{
case 1 : print_list();break;
case 2 : insert(); break;
case 3 : del(); break;
case 4 : edit(); break;
case 5 : close(); break;
}
}
void main()
{
creat_list();
}
minicom的使用方法
输入以下命令进行设置,如图。
#minicom -s
(2)选择串口
选择菜单中的“ Serial port setup ”,按回车,进入如下图所示界面。此时按“ A ”以设置“ Serial Device ”(如果您使用串口 1 ,则输入 /dev/ttyS0 ,如果您使用串口2,则输入/dev/ttyS1)。
(3)设置波特率
按“ E ”键进入设置“ bps/par/Bits ”(波特率)界面,如下图所示。再按“ I ”以设置波特率为 115200,
(4)设置无流控制
然后按回车退回到上一级菜单,按“F”键设置“ Hardware Flow Control ”为“ NO ”,其他选项使用缺省值
(5)保存设置
再选择“Exit”退出设置模式。刚才的设置被保存到“ /etc/minirc.dfl ”。
设置完毕,如果此时打开目标板电源的电源开关,就会看到 vivi 的启动信息,当 Linux 启动以后, minicom 就等于相当于虚拟终端,你就能通过它来操作目标板了。
要退出 minicom ,同时按下“ Ctrl+A ”键,送开后紧接着再按下“ Q ”键,在跳出的窗口中,选择“ Yes ”
2008年11月6日星期四
ubuntu开启桌面效果后白屏的解决方法
1) ctrl+alt+backspace注销切换到登录界面
2)左下角option里选择change section, 选择failsafe terminal
3)输入帐号密码进入后,在命令行输入gconf-editor
4)依次选择Desktop->Gnome->Applications->window_manager , 把两处/usr/bin/compiz改成/usr/bin/metacity
5)ctrl+alt+backspace注销切换到登录界面,change section 选择gnome
2008年11月5日星期三
U-boot移植
1 )在网上下载一个 u-boot 源代码,我用的是 1.1.2 版本的,最新的应该是 1.1.4 的吧,其实差不多,那就像我那样下载一个 1.1.2 版本的吧。 把源文件解压,这个应该不用说了吧,学过 linux 的人应该会,不会的话我想你继续做下去也困难,那就先装个 linux 用下吧(我用的是 RedHat 的, 哦对了,编译程序是需要 gcc 编译器的,所以安装方式一定要选择工作站哦 ^_^ )。好了,解压后你发现在 u-boot.1.1.2 目录下有 Makefile 这个文件吧?让我们看看它里面的内容,最简单的方法就是 vi Makefile 了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
看到吧,也就是说这里所用的交叉编译器是 arm-linux-gcc 了,( u-boot 默认是用这个的,也有用 arm-elf-gcc 的,网上有个工具包 arm-elf-tools-20030314.sh, 我试过用它来编译,没有问题,顺便提一下, arm-elf-gcc 是用来编译 uClinux 内核的 工具来的)那你就下载一个 arm-linux- 的交叉编译器吧,我是在网上下载 cross-2.95.3.tar.bz2 这个文件,然后解压得到 2.95.3 版本的交叉编译工具的,具体设置如下(参考网上资料):
2 )在宿主机上建立 arm-linux-gcc 交叉编译环境
在 RedHat Linux 系统下以 root 用户登录,
将 cross-2.95.3.tar.bz2 文件复制到 / 目录下,
安装:
# tar jxvf cross-2.95.3.tar.bz2
这个命令会在你的 /usr/local/arm/2.95.3 目录下安装 arm-linux-gcc 交叉编译程序,
然后在 PATH 变量中添加一项: /usr/local/arm/2.95.3/bin.
[root@localhost root]# export ATH=/usr/local/arm/2.95.3/bin:$PATH
或
把 PATH=/usr/local/arm/2.95.3/bin:$PATH 添加到 /ETC/bash_profile 文件中
或者
在 /etc/bashrc 文件中添加一项 :
export PATH=/usr/local/arm/2.95.3/bin:$PATH
测试:
把终端关闭,重新打开后执行如下命令:
# arm-linux-gcc –v
好了,建立好交叉编译环境后可以试着编译 u-boot 了
这里提几个注意点:
1. 不可用 winRAR 解压 u-boot-1.1.2.tar.bz2 或 u-boot-1.1.2.tar.gz 这种文件(就个可能新手会犯,一般熟悉 linux 命令的人应该都不会这样做吧,在此还是要提一下)
2. 可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在 u-boot.1.1.2 目录下运行命令: make distclean (其实这个命令在 Makefile 文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这样 ^_^ ) ;
3 ,有些人为了方便想在 cygwin 下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也多,而且好像我用过那个 vi 没有 linux 环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开 windows 的话可以像我这样装个虚拟机,在虚拟机下再装 linux 的系 统,具体参考这个网站): http://fedora.linuxsir.org/doc/vmware/
3 )好了,现在开始测试你的交叉编译器搞好没有。在 u-boot. 1.1.2 目录下执行如下命令:
1)Make distclean ( 再次强调 )
2)Make B2_config( 随便再个现成的试试 ^_^)
3)Make ( 没错的话应该会生成 u-boot.bin 文件,发生错误的话也不怕,只要细心看一下哪里错就行了, gcc 碰到错误后会退出编译,所以可以一个个错误来 改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是 arm-linux- 而你装的是 arm-elf- ,如果你装了的话看看你的环境 变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如 start.S 但是如果你的是 start.s 小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的) )
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的 u-boot 源代码了,可以开始以下阶段。
3. 移植:
说时迟那时快,现在开始移植工作 ( 以下是我一步步重新做一遍,力求说得详细点,感谢我吧 ^_^)
我以 B2 板子的程序做为模板来做 .
#cd u-boot- 1.1.2
#cd board
#cp -R dave myboard ( 这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦 ^_^)
#cd myboard
#mv B2 myboards 3c 44b0 ( 自己取个板子名 )
#cd myboards 3c 44b0
# mv B2.c myboards 3c 44b0.c
修改 myboards 3c 44b0 里面的 Makefile, 把 B2 改成 myboards 3c 44b0 ,编译时如果报的其它类似找不到 B2 的错误也是把相应的 B2 改成 myboards 3c 44b0 来处理。
arm学习中需了解的一些名词
Kernel 操作系统内核 操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。下面列出了它的一些核心功能:
事件的调度和同步。
进程间的通信(消息传递)。
存储器管理。
进程管理。
输入输出例程的管理。
2008年11月4日星期二
c二叉树
struct tree
{
int data;
struct tree *left;
struct tree *right;
};
typedef struct tree treenode;
typedef treenode *b_tree;
b_tree creat()
{
char ch;
b_tree newnode;
ch=getchar();
if (ch==' ') return(NULL);
else
{ newnode=(b_tree)malloc(sizeof(treenode));
newnode->data=ch;
newnode->left=creat(newnode);
newnode->right=creat(newnode);
}
return newnode;
}
void front_print(b_tree root)
{
if(root!=NULL)
{
printf("[%c]",root->data);
front_print(root->left);
front_print(root->right);
}
}
void middle_print(b_tree root)
{
if(root!=NULL)
{
middle_print(root->left);
printf("[%c]",root->data);
middle_print(root->right);
}
}
void back_print(b_tree root)
{
if(root!=NULL)
{
back_print(root->left);
back_print(root->right);
printf("[%c]",root->data);
}
}
int countleaf(b_tree root,int *i)
{
if(root==NULL)
return 0;
else
{
if((root->left==NULL)&&(root->right==NULL))
(*i)++;
countleaf(root->left,i);
countleaf(root->right,i);
return *i;
}
}
int locate(b_tree root,char x)
{
if(root==NULL)
return 0;
else
{
if(root->data==x)
printf("\nSuccess!You research data is %c",x);
locate(root->left,x);
locate(root->right,x);
}
}
int t_depth(b_tree root)
{
int dep1,dep2;
if(root==NULL)
return 0;
else
{
dep1=t_depth(root->left);
dep2=t_depth(root->right);
if(dep1>dep2)
return(dep1+1);
else
return(dep2+1);
}
}
void main()
{
b_tree root=NULL;
char x;
int select;
int depth=0;
int *i=0;
int j;
printf("Please set up a tree.\n");
printf("Notice:if no have crunode please input blank!!!\n");
root=creat();
do
{
printf("\n(1) Show the tree in a front-root order.");
printf("\n(2) Show the tree in a middle-root order.");
printf("\n(3) Show the tree in a back-root order.");
printf("\n(4) Show the the leafage number of tree.");
printf("\n(5) Locate a data in the tree.");
printf("\n(6) Show the depth of the tree.");
printf("\n(7) Exit");
printf("\nPlease select one:");
scanf("%d",&select);
switch(select)
{
case 1: printf("\nThe tree is :");
front_print(root);
break;
case 2: printf("\nThe tree is :");
middle_print(root);
break;
case 3: printf("\nThe tree is :");
back_print(root);
break;
case 4: *i=countleaf(root,i);
printf("\nThe tree have %d leafage.\n",*i);
*i=0;
break;
case 5: getchar();
printf("Please input the data you want to research: ");
x=getchar();
locate(root,x);
break;
case 6: depth=t_depth(root);
printf("The depth of the tree is %d.\n",depth);
break;
case 7:
break;
}
}
while(select<7);
printf("\n Press any key to quit...");
getch();
}
2008年11月3日星期一
linux安装配置ftp
直接从源里面安装,easy
代码:
sudo apt-get install vsftpd
安装完毕后或许会自动生成一个帐户"ftp",/home下也会增加一个文件夹。
如果没有生成这个用户的话可以手动来,生成了就不用了:
代码:
sudo useradd -m ftp
sudo passwd ftp
有"ftp"帐户后还要更改权限
代码:
sudo chmod 777 /home/ftp
在这个目录下我建立一个文件夹专门保存需要共享的内容
2.配置文件
通过sudo gedit /etc/vsftpd.conf修改。
配置文件比较简单,如下
代码:
#独立模式启动
listen=YES
#同时允许4客户端连入,每个IP最多5个进程
max_clients=200
max_per_ip=4
#不允许匿名用户访问,允许本地(系统)用户登录
anonymous_enable=NO
local_enable=YES
write_enable=NO
#是否采用端口20进行数据传输
connect_from_port_20=YES
#生成日志
xferlog_enable=YES
#指定登录转向目录
local_root=/home/ftp/ftp
这样,在同局域网的电脑上,用我的IP地址,用帐号"ftp"和对应密码就可以登录了,密码是第一步里面passwd那句指定的。
就这样就结束了,请大家拍砖!![/code]
----------------------------------
对了,更改配置后不要忘了重启ftp服务 :D
代码:
sudo /etc/init.d/vsftpd restart
2008年11月1日星期六
数据结构C语言实现系列——线性表
#include
#include
typedef int elemType;
/************************************************************************/
/* 以下是关于线性表顺序存储操作的16种算法 */
/************************************************************************/
struct List{
elemType *list;
int size;
int maxSize;
};
void againMalloc(struct List *L)
{
/* 空间扩展为原来的2倍,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间 */
elemType *p = realloc(L->list, 2 * L->maxSize * sizeof(elemType));
if(!p){ /* 分配失败则退出运行 */
printf("存储空间分配失败! ");
exit(1);
}
L->list = p; /* 使list指向新线性表空间 */
L->maxSize = 2 * L->maxSize; /* 把线性表空间大小修改为新的长度 */
}
/* 1.初始化线性表L,即进行动态存储空间分配并置L为一个空表 */
void initList(struct List *L, int ms)
{
/* 检查ms是否有效,若无效的则退出运行 */
if(ms <= 0){
printf("MaxSize非法! ");
exit(1); /* 执行此函数中止程序运行,此函数在stdlib.h中有定义 */
}
L->maxSize = ms; /* 设置线性表空间大小为ms */
L->size = 0;
L->list = malloc(ms * sizeof(elemType));
if(!L->list){
printf("空间分配失败! ");
exit(1);
}
return;
}
/* 2.清除线性表L中的所有元素,释放存储空间,使之成为一个空表 */
void clearList(struct List *L)
{
if(L->list != NULL){
free(L->list);
L->list = 0;
L->size = L->maxSize = 0;
}
return;
}
/* 3.返回线性表L当前的长度,若L为空则返回0 */
int sizeList(struct List *L)
{
return L->size;
}
/* 4.判断线性表L是否为空,若为空则返回1, 否则返回0 */
int emptyList(struct List *L)
{
if(L->size ==0){
return 1;
}
else{
return 0;
}
}
/* 5.返回线性表L中第pos个元素的值,若pos超出范围,则停止程序运行 */
elemType getElem(struct List *L, int pos)
{
if(pos < 1 || pos > L->size){ /* 若pos越界则退出运行 */
printf("元素序号越界! ");
exit(1);
}
return L->list[pos - 1]; /* 返回线性表中序号为pos值的元素值 */
}
/* 6.顺序扫描(即遍历)输出线性表L中的每个元素 */
void traverseList(struct List *L)
{
int i;
for(i = 0; i < L->size; i++){
printf("%d ", L ->list[i]);
}
printf(" ");
return;
}
/* 7.从线性表L中查找值与x相等的元素,若查找成功则返回其位置,否则返回-1 */
int findList(struct List *L, elemType x)
{
int i;
for(i = 0; i < L->size; i++){
if(L->list[i] == x){
return i;
}
}
return -1;
}
/* 8.把线性表L中第pos个元素的值修改为x的值,若修改成功返回1,否则返回0 */
int updatePosList(struct List *L, int pos, elemType x)
{
if(pos < 1 || pos > L->size){ /* 若pos越界则修改失败 */
return 0;
}
L->list[pos - 1] = x;
return 1;
}
/* 9.向线性表L的表头插入元素x */
void inserFirstList(struct List *L, elemType x)
{
int i;
if(L->size == L->maxSize)
for(i = L->size - 1; i >= 0; i--){
L->list[i + 1] = L ->list[i];
}
L->list[0] = x;
L->size ++;
return;
}
/* 10.向线性表L的表尾插入元素x */
void insertLastList(struct List *L, elemType x)
{
if(L->size == L ->maxSize){ /* 重新分配更大的存储空间 */
againMalloc(L);
}
L->list[L->size] = x; /* 把x插入到表尾 */
L->size++; /* 线性表的长度增加1 */
return;
}
/* 11.向线性表L中第pos个元素位置插入元素x,若插入成功返回1,否则返回0 */
int insertPosList(struct List *L, int pos, elemType x)
{
int i;
if(pos < 1 || pos > L->size + 1){ /* 若pos越界则插入失败 */
return 0;
}
if(L->size == L->maxSize){ /* 重新分配更大的存储空间 */
againMalloc(L);
}
for(i = L->size - 1; i >= pos - 1; i--){
L->list[i + 1] = L->list[i];
}
L->list[pos - 1] = x;
L->size++;
return 1;
}
/* 12.向有序线性表L中插入元素x, 使得插入后仍然有序*/
void insertOrderList(struct List *L, elemType x)
{
int i, j;
/* 若数组空间用完则重新分配更大的存储空间 */
if(L->size == L->maxSize)
/* 顺序查找出x的插入位置 */
for(i = 0; i < L->size; i++){
if(x < L->list[i]){
break;
}
}
/* 从表尾到下标i元素依次后移一个位置, 把i的位置空出来 */
for(j = L->size - 1; j >= i; j--)
L->list[j+1] = L->list[j];
/* 把x值赋给下标为i的元素 */
L->list[i] = x;
/* 线性表长度增加1 */
L->size++;
return;
}
/* 13.从线性表L中删除表头元素并返回它,若删除失败则停止程序运行 */
elemType deleteFirstList(struct List *L)
{
elemType temp;
int i;
if(L ->size == 0){
printf("线性表为空,不能进行删除操作! ");
exit(1);
}
temp = L->list[0];
for(i = 1; i < L->size; i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}
/* 14.从线性表L中删除表尾元素并返回它,若删除失败则停止程序运行 */
elemType deleteLastList(struct List *L)
{
if(L ->size == 0){
printf("线性表为空,不能进行删除操作! ");
exit(1);
}
L->size--;
return L ->list[L->size]; /* 返回原来表尾元素的值 */
}
/* 15.从线性表L中删除第pos个元素并返回它,若删除失败则停止程序运行 */
elemType deletePosList(struct List *L, int pos)
{
elemType temp;
int i;
if(pos < 1 || pos > L->size){ /* pos越界则删除失败 */
printf("pos值越界,不能进行删除操作! ");
exit(1);
}
temp = L->list[pos-1];
for(i = pos; i < L->size; i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}
/* 16.从线性表L中删除值为x的第一个元素,若成功返回1,失败返回0 */
int deleteValueList(struct List *L, elemType x)
{
int i, j;
/* 从线性表中顺序查找出值为x的第一个元素 */
for(i = 0; i < L->size; i++){
if(L->list[i] == x){
break;
}
}
/* 若查找失败,表明不存在值为x的元素,返回0 */
if(i == L->size){
return 0;
}
/* 删除值为x的元素L->list[i] */
for(j = i + 1; j < L->size; j++){
L->list[j-1] = L->list[j];
}
L->size--;
return 1;
}
/************************************************************************/
void main()
{
int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int i;
struct List L;
initList(&L, 5);
for(i = 0; i < 10; i++){
insertLastList(&L, a[i]);
}
insertPosList(&L, 11, 48); insertPosList(&L, 1, 64);
printf("%d ", getElem(&L, 1));
traverseList(&L);
printf("%d ", findList(&L, 10));
updatePosList(&L, 3, 20);
printf("%d ", getElem(&L, 3));
traverseList(&L);
deleteFirstList(&L); deleteFirstList(&L);
deleteLastList(&L); deleteLastList(&L);
deletePosList(&L, 5); ;deletePosList(&L, 7);
printf("%d ", sizeList(&L));
printf("%d ", emptyList(&L));
traverseList(&L);
clearList(&L);
return 0;
}
2008年10月29日星期三
ubuntu linux安装配置NFS
Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:
xhylyx@xhylyx-desktop:~$ sudo apt-get install nfs-kernel-server
安装nfs-kernel-server时,apt会自动安装nfs-common和portmap
这样,宿主机就相当于NFS Server
2.配置NFS
(1)配置portmap
方法1: 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉.
方法2: $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.
(2)配置/etc/hosts.deny
禁止任何host(主机)能和你的NFS服务器进行NFS连接,加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
(3)配 置/etc/hosts.allow
允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.2开头的主机(连 接到NFS服务器上),也可以指定
特定的IP地址,加入:
### NFS DAEMONS
portmap: 192.168.2.
lockd: 192.168.2.
rquotad: 192.168.2.
mountd: 192.168.2.
statd: 192.168.2.
/etc/hosts.deny 和 /etc/hosts.allow 设置对portmap的访问. 采用这两个配置文件有点类似"mask"的意思. 现在/etc/hosts.deny中禁止所有用
户对portmap的访问. 再在/etc/hosts.allow 中允许某些用户对portmap的访问.
xhylyx@xhylyx-desktop:~$sudo /etc/init.d/portmap restart
重启portmap daemon.
(4)配置/etc/exports
NFS挂载目录及权限由/etc/exports文件定义
比如我要将将我的/opt/FriendlyARM/QQ2440/root_nfs目录让172.16.53.*的IP共享, 则在该文件末尾添加下列语句:
/opt/FriendlyARM/QQ2440/root_nfs 172.16.53.*(rw,sync,no_root_squash)
或者:/opt/FriendlyARM/QQ2440/root_nfs 172.16.53.0/24(rw,sync,no_root_squash)
172.16.53.* 网段内的NFS客户端能够共享NFS服务器/opt/FriendlyARM/QQ2440/root_nfs目录内容.且有读,写权限, 并且该用户进入
/opt/FriendlyARM/QQ2440/root_nfs目录后的身份为root
最好加上sync, 否则 $ sudo exportfs -r 时会给出警告, sync是NFS的默认选项.
root@xhylyx-desktop:/#showmount -e 查看NFS server的export list.
若更改了/etc/exports, 运行 xhylyx@xhylyx-desktop:~$sudo exportfs -r 更新
运行 xhylyx@xhylyx-desktop:~$ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
(5)测试NFS
可以尝试一下挂载本地磁盘
我前面开始时已经提到了我的主机IP是172.16.53.214
我现在试把/opt/FriendlyARM/QQ2440/root_nfs目录挂载到/mnt目录下
root@xhylyx-desktop:/#mount -t nfs 172.16.53.214:/opt/FriendlyARM/QQ2440/root_nfs /mnt
成功的挂载上的话你会在/mnt目录下看到root_nfs这个文件夹下的内容
(6)错误解决
# mount -t nfs -o ro,soft,intr fs:/share /mnt/fs/share
mount: wrong fs type, bad option, bad superblock on fs04:/share,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.
In some cases useful info is found in syslog - try
dmesg | tail or so
解决
# apt-get install nfs-common
2008年10月28日星期二
ubuntu快捷健
2、如果要让立方体增加一个倒影,勾选 CompizConfig -> Cube Reflection 即可。
Tips: 展示立方体默认快捷键是 Ctrl+Alt+鼠标左键拖动,Ctrl+Alt+方向键旋转立方体。
3、使用神灯效果,这个效果最早出现在 Mac 上。
勾选 CompizConfig -> Animations
Tips: 建议取消 CompizConfig -> 最小化效果,勾选 CompizConfig -> 渐弱窗口
4、火焰字
勾选 CompizConfig -> Paint fire on the screen 即可。
可以在 CompizConfig -> Paint fire on the screen -> Fire Particle Color 这里设置火焰的颜色,勾选 Randomly Colored Fire 会写出五彩斑斓的文字。
Tips: 默认快捷键是 shift+win+鼠标左键,按 shift+win+c 是清除效果。
5、桌面展示
勾选 CompizConfig -> Expo
Tips: 默认快捷键是 win+e,鼠标移动到屏幕左上角也可以。
6、雪花效果
勾选 CompizConfig -> Snow
再到这里下载雪花材质,在 Snow -> Textures 这里添加进去即可。
7、菜单透明问题
默认菜单是透明的,可以到 CompizConfig -> General Options -> Opacity Settings 这里进行设置。删除 Window opacities 里面的那行代码就可以了。
8、3D 层叠窗口效果
勾选 CompizConfig -> 3D Windows
9、给立方体中增加一些鱼儿
勾选 CompizConfig -> Cube Atlantis
按住 Ctrl+Alt+鼠标左键拖动桌面,就能看见了。
10、屏幕保护
勾选 CompizConfig -> Screen Saver
有两种效果,一种是 Rotating cube 旋转立方体,一种是 Flying windows 飞行的窗口。
11、3D 窗口切换效果
勾选 CompizConfig -> Shift Switcher
在 Switcher mode 中可以选择两种切换效果,一种类似 Vista 的 Flip3D 切换,一种类似 Mac 的 CoverFlow 切换。
Tips: 默认快捷键是:超级键+Tab
* 打开主菜单 = Alt + F1
* 运行 = Alt + F2
* 显示桌面 = Ctrl + Alt + d
* 最小化当前窗口 = Alt + F9
* 最大化当前窗口 = Alt + F10
* 关闭当前窗口 = Alt + F4
* 截取全屏 = Print Screen
* 截取窗口 = Alt + Print Screen
默认特殊快捷键
* 展示所有窗口程序 = F10
* 展示当前窗口最上层程序 = F11
* 展示当前窗口所有程序 = F12
* 切换窗口 = Alt + Tab
* 旋转3D桌面 = Ctrl + Alt + 左/右箭头(也可以把鼠标放在标题栏或桌面使用滚轮切换)
* 旋转3D桌面(活动窗口跟随) = Ctrl + Shift + Alt + 左/右箭头
* 手动旋转3D桌面 = Ctrl + Alt + 左键单击并拖拽桌面空白处
* 窗口透明/不透明 = possible with the “transset” utility or Alt + 滚轮
* 放大一次 = 超级键 + 右击
* 手动放大 = 超级键 + 滚轮向上
* 手动缩小 = 超级键 + 滚轮向下
* 移动窗口 = Alt + 左键单击
* 移动窗口时贴住边框 = 左键开始拖动后再 Ctrl + Alt
* 调整窗口大小 = Alt + 中击
* Bring up the window below the top window = Alt + middle-click
* 动态效果减速 = Shift + F10
* 水纹 = 按住 Ctrl+超级键
* 雨点 = Shift-F9
* 桌面展开= Ctrl + Alt + 下箭头,然后按住 Ctrl + Alt 和左/右箭头选择桌面
* 火焰=超级键+shift+左键拖动 取消:超级键+shift+c
* 选择多窗口,合并,切换,取消 超级键+s, 超级键+g ,超级键 +t,超级键+u--------
linux下删除非空文件夹
删除文件夹用:rmdir 文件夹名
但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢:
命令:rm -rf 非空文件夹名
复制文件夹
CP命令
格式: CP [选项] 源文件或目录 目的文件或目录
选项说明:-b 同名,备分原来的文件
-f 强制覆盖同名文件
-r 按递归方式保留原目录结构复制文件
/etc/profile环境变量配置解析
与环境变量相关的文件可能还会有/etc/bashrc等,不过这是shell变量,是局部的,对于特定的shell器作用。/etc/profile是全局的,适用于所有的shell。
profile文件会告诉shell使用什么语言,什么shell,命令的搜索路径等等。
一些标准的环境变量:
SHELL 默认shell
LANG 默认语言
PATH linux寻找命令的默认路径,一般包括/bin,/usr/bin,/sbin,/usr/sbin,
/usr/X11R6/bin,/opt/bin,/usr/local/bin等。用户可以自行添加,
如/home/bin等.
MANPATH man手册的默认路径
INPUTRC 默认键盘映象,详见/etc/inputrc
BASH_ENV bash shell的环境变量,通常在~/.bashrc中
DISPLAY X窗口适用的控制台,DISPLAY=:0对应于控制台F7,DISPLAY=:1对应于控制
台F8,DISPLAY=server:0向远程计算机发送GUI应用程序。
COLORTERM GUI中的默认终端,通常是gnome-terminal。
USER 自动设置当前登陆用户的用户名。
LONGNAME 通常设置为$USER
MAIL 设置特定$USR的标准邮件目录
HOSTNAME 设置为/bin/hostname的命令输出
HISTSIZE 设置为history命令记住的命令数
例子:
#
# /etc/profile
#
#修改或添加PATH可以自定义命令的寻找路径,如果你不想将可执行文件添加到默认目录中但又可以在终端中使用命
#令,那就改吧。
export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/opt/bin:/usr/local/bin"
export MANPATH="/usr/man:/usr/X11R6/man"
export LESSCHARSET="latin1"
export INPUTRC="/etc/inputrc"
export LESS="-R"
# Locale settings (find your locale with ''locale -a'')
export LANG="zh_CN" #修改这里可以改变系统的默认使用语言
export LC_COLLATE="C"
export COLUMNS LINES
export PS1=''[\u@\h \W]\$ ''
export PS2=''> ''
umask 022
……
……
# End of file
linux下部分文件解压方法
.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/
参考文献:Linux 文件压缩工具指南
(其实看帮助是最好的方法,一般各个命令都可以用“--help”参数得到常用使用方法!)
发布人:会游泳的鱼 来自:LinuxByte
交叉编译环境搭建
从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载交叉编译器cross-3.2.tar.bz2,存放在/usr/local目录下。
切换致该目录:
# cd /usr/local
# mkdir arm
然后解压cross-3.2.tar.bz2:
# tar jxvf cross-3.2.tar.bz2 –C /usr/local/arm
3、把交叉编译器的路径加入到PATH。(两种方法a,b)
a、#export PATH=$PATH:/usr/local/arm/2.95.3/bin
注:(这只能在当前的终端下才是有效的,)
b、修改/etc/profile文件:
# vi /etc/profile
增加路径设置,在末尾添加如下:
export PATH=$PATH:/usr/local/arm/2.95.3/bin
4、使新的环境变量生效。
# source /etc/profile
5、检查是否将路径加入PATH的方法。
# echo $PATH
如果显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。自此,交叉编译环境安装完成。
6、测试。
下面我们就来测试一个简单的例子。
/*Hello.c*/
#include
int main()
{
printf(“hello word!\n”);
return 0;
}
程序输好以后确认无误,保存。进入程序文件所在目录
# arm-linux-gcc hello.c–o hello
(-o可以理解为“目标为生成”)arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对arm的CPU的gcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc hello.c–o hello就可以生成PC机上程序了,在运行./hello就可以发现终端显示hello!字样。用arm-linux-gcc编译的程序在PC机上是不能运行的,运行后给出错误报告:无法执行二进制文件。说明经过交叉编译环境编译出的文件是硬件可执行的二进制代码文件.
linux下安装ssh
如果出现以下错误,则很可能是因为还没有安装ssh-server:
ssh: connect to host localhost port 22: Connection refused
安装SSH-server:
sudo apt-get install openssh-server
启动SSH-Server
sudo /etc/init.d/ssh start
linux下用bind9配置dns服务器
linux下bind9配置dns服务器——xxh
1.安装bind9:
sudo apt-get install bind9
2.修改named.conf.local文件:
zone "local.com" {
type master;
file "/etc/bind/db.local.com";
};
zone "206.10.10.in-addr.arpa" {
type master;
file "/etc/bind/db.10.10.206";
};
3.创建db.local.com文件:
$TTL 604800
@ IN SOA local.com. root.local.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS local.com.
@ IN A 10.10.206.1
www IN A 10.10.206.1
xxh IN A 10.10.206.105
3.创建db.10.10.206文件:
$TTL 604800
@ IN SOA local.com. root.local.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS local.com
1 IN PTR local.com
105 IN PTR xxh.local.com
4.修改本机dns:
sudo vi /etc/resolv.conf
search local.com
nameserver 10.10.206.1
5.重启bind:
sudo /etc/init.d/bind9 restart
6.查看是否成功:
nslookup www.local.com
若返回:
xxh@root:/etc/bind$ nslookup www.local.com
Server: 10.10.206.1
Address: 10.10.206.1#53
Name: www.local.com
Address: 10.10.206.1
配置成功。