Google

笔记分类

2008年12月8日星期一

嵌入式就业尖端公司

北京博创兴业科技有限公司
北京亿旗创新科技发展有限公司
北京赛德菱信息技术有限公司
北京微芯力科技
研华科技
北京精仪达盛科技有限公司
北京革新科技有限公司
北京启东微芯科技发展有限公司
北京金一倍科技发展有限公司
清华大学科教仪器厂
亿道电子技术有限公司
深圳市英蓓特信息技术有限公司
深圳市远峰计算机技术有限公司
华恒科技
上海复旦金海博科技有限公司
上海思创培训
成都傅立叶电子科技有限公司
长沙科瑞特电子有限公司
武汉创维特信息技术有限公司
凌阳大学计划
湖南湘潭胜西电子科技有限公司
祥佑数码科技有限公司
风标科技
杭州星晨单片机电子有限公司

2008年12月1日星期一

Linux下文件类型及表示颜色

n 白色:普通文件 (用-表示)
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、安装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的区别

1. 当进程创建一个字进程时候,父进程并不会将普通变量的值传递给它的子进程。

而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-linux-gcc是针对arm + linux的开发环境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。

而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

数据结构之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的使用方法

(1) 使用 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开启桌面效果后白屏的解决方法

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移植

uboot官方下载地址: http://www.icdev.com.cn/batch.viewlink.php?itemid=1694
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
  Kernel 操作系统内核 操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。下面列出了它的一些核心功能:
  事件的调度和同步。
  进程间的通信(消息传递)。
  存储器管理。
  进程管理。
  输入输出例程的管理。

2008年11月4日星期二

c二叉树

#include
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

1.安装vsftpd
直接从源里面安装,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语言实现系列——线性表

数据结构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

1.安装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. helper program)

In some cases useful info is found in syslog - try

dmesg | tail or so
解决
# apt-get install nfs-common

2008年10月28日星期二

各大搜索引擎网站收录入口

Google网站登录
Baidu 网站登录
Yahoo 网站登录
Live 网站登录
Dmoz 网站登录
Coodir网站目录登录
Alexa 网站登录
Sogou 非商业登录
中国搜索网站登录
iAsk 网站登录
搜索引擎收录查询
有道搜索网站登录
Accoona 网站登录
Onebigdirectory.com 搜索引擎批量提交
Chainer.com 搜索引擎批量提交
Freewebsubmission.com 搜索引擎批量提交

ubuntu快捷健

1、给立方体设置一个背景,进入 CompizConfig -> 桌面立方体 -> Appearance -> Skydome 勾选 “Background”,在 Background Images 中选择一个背景图片即可。
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下宽带拨号上网

打开终端 pppoeconf

linux下调节声音大小

1.打开终端,输入:alsamixer


2.用左右方向键,选择项目; 用上下键调节大小。

linux下删除非空文件夹

删除文件用:rm 文件名

删除文件夹用: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。(两种方法ab

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.co hello

-o可以理解为“目标为生成”)arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对armCPUgcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc hello.co hello就可以生成PC机上程序了,在运行./hello就可以发现终端显示hello!字样。用arm-linux-gcc编译的程序在PC机上是不能运行的,运行后给出错误报告:无法执行二进制文件。说明经过交叉编译环境编译出的文件是硬件可执行的二进制代码文件.

gcc编译失败解决

刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等好多必须的软件和头文件。
  sudo apt-get install build-essential
  安装完成后写一个C语言程序testc.c测试一下。

linux下安装ssh

ssh localhost

如果出现以下错误,则很可能是因为还没有安装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

配置成功。