原创 关于cygwin

2008-1-19 19:03 2925 10 11 分类: MCU/ 嵌入式
cygwin是什么?

  cygwin是一个在windows平台上运行的 linux模拟环境,是cygnus solutions公司开发的自由软件。 


  cygwin的工作机制:cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在 windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html


一、cygwin的安装。 


  step1. 下载后,点击安装文件(setup.exe)进行安装,第一个画面是GNU版权说明,点"下一步(N)—>",进入安装模式选择画面。


  step2. 安装模式有"Install from Internet"、"Download form Internet"、


"Install from Local Directory" 三种。"Install form Internet"就是直接从internet上装,适用于网速较快的情况。如果网速不是很快,或者说装过之后想把下载的安装文件保存起来,下次不再下载了直接安装,就应该选择"Download form Internet",下载安装的文件(大约400M左右)。我选择了"Install from Internet"(我等得好可怜啊: )


  step3. 接下来是选择安装目的路径和安装源文件所在的路径,之后就进入了选择安装包所在的路径。


注意了啊,这里可是重头戏。我第一次安装的时候就是没有看清这一步,结果没有把gcc装进去,导致没法编译文件。(费了千辛万苦的耐心,最后却运行不了,郁闷死我了)


   + All  Default


      + Admin Default


       ....


      + Devel   Default


      + Editors Default


      ....


如上所示,你在这个TreeView的某个节点上双击,就可以改变它的状态,如Default、Install、Uninstall、Reinstall四种状态。默认的都是Default状态,很多工具的默认状态都是不安装。


在这里我选择了在All这一行上后面的Default上点Install,全部安装,以免后患。(注意:这里的树形控件和win下面的不同,你试试点在All上点 和 在All这一行后面的Default上点,会有不同的响应)


  step4. 点下一步,安装成功。它会自动在你的桌面上建立一个快捷方式。


 二、常用的命令


  好了,下面就开始我的linux旅程了。双击cygwin的快捷方式进入系统。


首先介绍几个简单的linux命令。


pwd   显示当前的路径


cd    改变当前路径,无参数时进入对应用户的home目录


ls    列出当前目录下的文件。此命令有N多参数,比如ls -al


ps    列出当前系统进程


kill  杀死某个进程


mkdir 建立目录


rmdir 删除目录


rm    删除文件


mv    文件改名或目录改名


man   联机帮助


less  显示文件的最末几行


由于linux下面的命令大多都有很多参数,可以组合使用。所以,每当你不会或者记不清楚改用那个参数,那个开关的时候,可以用man来查找,比如,我想查找ls怎么使用,可以键入


$  man ls


系统回显信息如下:


LS(1)                          FSF                          LS(1)


NAME


       ls - list directory contents


SYNOPSIS


       ls [OPTION]... [FILE]...


DESCRIPTION


       List information about the FILEs (the current directory by


       default).  Sort entries alphabetically if none of -cftuSUX


       nor --sort.


       -a, --all


             do not hide entries starting with .


       -A, --almost-all


             do not list implied . and ..


       -b, --escape


             print octal escapes for nongraphic characters


       --block-size=SIZE


             use SIZE-byte blocks


:


三、 第一个C和C++程序


好了,多说无意,让我们来写一个hello world程序。


# cd


  进入了/home/administrator目录,我当前的登陆帐号是administrator


# mkdir source


  建立一个叫做source的子目录


# cd source


  进入 /home/administrator/source


# vim hello.c


   启动vim编辑器,来编写程序。好了,现在有必要简要介绍一下vim。


在linux界,有两大编辑器最有历史。其一是vi,其二是emacs。vi现在已经演化成了vim,比当前的vi更为强大。vim和emacs是两种截然不同的东西,vim强调用简洁的命令来完成功能,无论是查找、替换、


正则表达式匹配、编译、链接、排错、函数间跳转等等等等都在命令行中完成,并且它把方向键也集成在了hjkl四个键之上,可以说,用了vim基本上可以不用鼠标了:p  emacs则是在功能强大上做文章,版本控制、模拟多种编辑环境、对文本进行各种操作,可谓之一个强大的文本处理系统。emacs是用诸如Ctrl+ Alt+K 之类的组合键来控制的;vim则是用se(set 的缩写)等简洁命令来控制的。


   由于cygwin中只提供了vim(能不能自己装emacs我还没有试过),我们就先体验一下vim吧:p


vim加载文本文件后分为命令模式和插入模式两种。插入模式,顾名思义就是输入编辑文本;命令模式,则是输入各种vim的控制命令,常用的有:


   i  进入编辑模式


   h  左移


   j  下移


   k  上移


   l  右移


   w  存盘


   q  退出


   ! 强调执行


有些命令是可以组合使用的,如果你修改了某个文件,想存盘退出,则可以使用wq;如果你想放弃存盘,直接退出则可以使用q!  好了大家体验一下吧,记住:从编辑模式退回命令模式按"Esc",再按":",在输入指令,从命令模式进入编辑模式用i,初次使用vim肯定很难受,嘿嘿,不过用多了就习惯了,确实很省劲。


我们编辑hello.c文件,输入:


#include


int main(void) {


  printf( "Hello World!");


}


然后,输入wq命令退到命令行。


输入编译指令:


# gcc hello.c -o hello


编译成功后可以看一下


# ls


看到hello.exe了吧,嘿嘿。


好,让我们运行看看。


# ./hello


效果如何?不错吧?


okey,现在玩一个C++的hello world,


# vim world.cpp


输入:


#include


using namespace std;


void main() {


  cout << "Hello World!";


}


编译C++程序要用g++


# g++ world.cpp -o world


运行一下哈,


# ./world

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户95592 2008-4-1 15:28

求职招聘五金人才网—中华五金网旗下的人才频道,打开方便之门,人才频道提供了最新人才和最新职位! http://person.chb2b.com

用户131105 2008-2-16 15:59

学习了.
相关推荐阅读
用户1578577 2008-07-24 17:00
视频解码优化[转]
视频解码优化以下通过剖析一些经验来了解视频解码优化1  在嵌入式系统中实现MPEG4的视频解码有两种方法可行(1)采用ffmpeg(mplayer 的核心就是采用ffmpeg),然后对ffmpeg m...
用户1578577 2008-07-24 09:20
xvid的学习
xvid有两种编码方式:single pass和twopass single pass模式编码简单,速度也快,但最终效果不如twopass。 twopass就是视频压制需要经过两次编码,分别为twop...
用户1578577 2008-07-03 20:07
linux下面编程的几个数据结构
1、获取磁盘信息                              struct   statfs   {                                       long...
用户1578577 2008-06-20 10:40
Linux 下串口编程入门
Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。串口简介串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是...
用户1578577 2008-06-20 10:06
va_list、va_start、va_arg、va_end的原理与使用
 概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数...
用户1578577 2008-06-14 16:16
Linux編程中遇到的幾個函數
1.atoi函數This function converts a given string to integerint atoi(const char *sz);returns the string'...
我要评论
1
10
关闭 站长推荐上一条 /4 下一条