2008年1月16日星期三

MIDI Reference

 
http://www.borg.com/~jglatt/tech/midifile/
http://ch.midifan.com/m_TechArticle/Detail.aspx?id=902
http://www.borg.com/~jglatt/tutr/miditutr.htm
http://www.harmony-central.com/MIDI/
http://www.protodesign-inc.com/doc/MIDIplay/Developers.htm
http://www.borg.com/~jglatt/tutr/miditutr.htm
http://blog.21ic.com/user1/2809/archives/2006/25100.html
http://www.cs.cf.ac.uk/Dave/Multimedia/node158.html
http://www.io.com/~jimm/midi_ref.html
http://www.borg.com/~jglatt/tech/midifile.htm

 

[Widcomm驱动]Widcomm.5.1.0.1700.Final.Release+Licensepatcher1.8

1、先解开安装文件包至目录A(这个是有点废话了),将原来的有的蓝牙驱动卸载掉,将windows\inf目录下的m$自带的bth.inf文件删除
2、打开licensepatcher1.8,选择file->open license file->选择目录A下面的license.dat(可能是某子目录)
3、在Devices中找到自己的蓝牙设备。此时你的蓝牙适配器必须插在电脑上,否则你可能在Devices中找不到你的
蓝牙设备。这一步你可以不用卸载你原来的驱动,这样你可以更容易找到你的蓝牙设备。
4、选择file――〉Save License file――〉覆盖widcomm驱动目录下的License.dat文件。此时在widcomm驱动目录
会生成新的License.dat文件和一个新的license.reg文件。1.8版会将目录中的btwusb.inf中加上你的ISSC的UID和VID,如下:
;
; WinXP or newer specific sections
;
[WIDCOMM.NTx86.5.1]
%BROADCOM.DeviceDesc%=SUSPENDUSB, USB\VID_0A5C&PID_200A
%BRCMANYCOMUHE.DeviceDesc%=BRSMARTUSB, USB\VID_0A5C&PID_2111
%BRCMANYCOM.DeviceDesc%=SUSPENDUSB, USB\VID_0A5C&PID_2102
%UNKNOWNUSB.DeviceDesc%=BTWUSB, USB\VID_1131&PID_1001 ; VID & PID added by Widcomm License Patcher <---这个

;
; Win2k specific sections
;
[WIDCOMM]
%BROADCOM.DeviceDesc%=SUSPENDUSB, USB\VID_0A5C&PID_200A
%BRCMANYCOMUHE.DeviceDesc%=BRSMARTUSB, USB\VID_0A5C&PID_2111
%BRCMANYCOM.DeviceDesc%=SUSPENDUSB, USB\VID_0A5C&PID_2102
%UNKNOWNUSB.DeviceDesc%=BTWUSB, USB\VID_1131&PID_1001 ; VID & PID added by Widcomm License Patcher <--这个
5、安装驱动程序(其实也不用取下狼牙棒),如果提示插入蓝牙,可以插入,但不一定会识别出来,如果未识别,请选择取消。
6、安装完毕,导入license.reg就OK了。一会儿我再帖两张图

2008年1月15日星期二

inux快捷键

Linux下有很多对于简化用户使用过程很有帮助的快捷键,下面做个简单的介绍:


在控制台/虚拟终端下

1. Ctrl-Alt-Delete -关闭计算机

2. Alt-Fn (F1, F2, F3,…) - 切换到第n个控制台

3. Alt-Left 或者 Alt-Right - 切换到上/下一个虚拟终端

4. Scroll Lock - 锁定终端的输入/输出-当屏幕输出滚动过快的时候可以用这个键给屏幕定格,再按一次Scroll Lock解除锁定。

也可以用另外一种方法实现这个功能,使用Ctrl-S 锁定屏幕,使用Ctrl-Q解除锁定。如果你的控制台突然出现了不明原因无响应也可以尝试一下后面的这个解锁快捷键,也许是因为你无意中触发了CTRL-S导致屏幕假死。

5. Shift-Page Up 或者 Shift-Page Down - 上、下滚动控制台缓存。这个功能在 Scroll Lock 启动的时候也是管用的。 在使用 (Alt-Fn) 更换控制台后缓存内容就被删除了,所以滚动无效。

6. Ctrl-L -刷新屏幕。

7. Ctrl-C 或者 Ctrl-\ -杀死当前任务

8. Ctrl-D - 作用是 EOF 即文件末尾(End-of-file)。如果你的光标处在一个空白的命令行上,将会退出bash,比你用exit命令退出要快得多。

9. Ctrl-Z - 暂停进程。使用命令:bg在后台运行或者使用fg在前端运行。

Bash & command-line

1. Ctrl-A - 把光标移动到命令行最开始的地方。
2. Ctrl-E - 把光标移动到命令行末尾。
3. Ctrl-U - 清除命令行中光标所处位置之前的所有字符。
4. Ctrl-W - 清除左边的字段
5. Ctrl-Y - 将会贴上被Ctrl-U 或者 Ctrl-K 或者 Ctrl-W清除的部分。
6. Ctrl-R - 将自动在命令历史缓存中增量搜索后面入的字符。
7. Tab - 命令行自动补全-自动补全当前的命令行。如果启用自动补全脚本命令参数和选项也可以自动补齐。
8. Ctrl-K - 清除从提示符所在位置到行末尾之间的字符。

Kernel shortcuts

下面的快捷键必须在内核中启用以后才可以使用。

而且必须启用魔术组合键(SysRQ):

启用SysRq:

$sudo echo 1 > /proc/sys/kernel/sysrq

禁用SysRq:

$sudo echo 0 > /proc/sys/kernel/sysrq

1. Alt-SysRQ-S - 同步所有已挂载的文件系统。所有缓存中的数据将被立刻写入磁盘。
2. Alt-SysRQ-U - 以只读方式重新挂载所有已挂载文件系统。
3. Alt-SysRQ-B - 快速重起。 不要在没有同步和卸载文件系统的情况下执行,否则会导致文件系统严重错误。
4. Alt-SysRQ-S,然后 Alt-SysRQ-U,然后 Alt-SysRQ-B - 同步所有文件系统、以只读方式重新挂载所有文件系统、立刻重新启动。这是重新启动Linux的最快方式。
5. Alt-SysRQ-H - 输出其他魔术组合键列表(SysRQ)功能。


X-Window快捷键

1. Ctrl-Alt-"+" 或者 Ctrl-Alt-"-"- 改变屏幕分辨率(提高/降低)。前提是在X-Window server配置文件中写入了多种可用分辨率。
2. Ctrl-Alt-Backspace - 杀死X-server,返回登录界面。所有正在运行的应用程序将被终止。
3. Ctrl-Alt-Escape - xkill - 点击一个应用程序强制关闭。
4. Ctrl-Shift-Num Lock 把键盘上的小键盘(数字键盘)变成鼠标,启动后你可以用小键盘进行鼠标操作。数字键盘上的/和 * 分别代表鼠标左键和鼠标右键,数字键盘上的 5是双击。(这个地方翻译的不确定,大家可以参考一下原文。我用的笔记本没办法测试这个功能。)
5. Ctrl-Alt-Fn (F1, F2, F3,…) - 切换到第 n 个文本控制台。一般Alt+F7切换回X-window。
6. Alt-F2 - 开启一个运行命令的小窗口。如果输入的是可执行命令则直接运行;如果输入的是文件名系统将调用适当的应用程序打开它;输入网址将用默认的浏览器打开它。

KDE 快捷键

1. Ctrl-Alt-Shift-Page Down - 直接关机
2. Ctrl-Alt-Shift-Page Up - 直接重启

FAT12文件系统基本格式(1.44M软盘)

FAT12文件系统基本格式(1.44M软盘)

FAT12是DOS时代就开始使用的文件系统,目前软盘上也一直在用。
引导扇区是软盘的第0个扇区,在这个扇区中有一个很重要的数据结构叫BPB(BIOS Parameter Block),下面是引导扇区格式,其中BPB_开头的属于BPB,以BS_开头的只是BOOT Sector的一部分,不属于BPB。

名称 开始字节 长度 内容 参考值
BS_jmpBOOT 0 3 一个短跳转指令 jmp Label_07c00H
nop
BS_OEMName 3 8 厂商名 'QingFeng'
BPB_BytesPerSec 11 2 每扇区字节数(Bytes/Sector) 0x200
BPB_SecPerClus 13 1 每簇扇区数(Sector/Cluster) 0x1
BPB_ResvdSecCnt 14 2 Boot记录占用多少扇区 ox1
BPB_NumFATs 16 1 共有多少FAT表 0x2
BPB_RootEntCnt 17 2 根目录区文件最大数 0xE0
BPB_TotSec16 19 2 扇区总数 0xB40[2*80*18]
BPB_Media 21 1 介质描述符 0xF0
BPB_FATSz16 22 2 每个FAT表所占扇区数 0x9
BPB_SecPerTrk 24 2 每磁道扇区数(Sector/track) 0x12
BPB_NumHeads 26 2 磁头数(面数) 0x2
BPB_HiddSec 28 4 隐藏扇区数 0
BPB_TotSec32 32 4 如果BPB_TotSec16=0,则由这里给出扇区数 0
BS_DrvNum 36 1 INT 13H的驱动器号 0
BS_Reserved1 37 1 保留,未使用 0
BS_BootSig 38 1 扩展引导标记(29h) 0x29
BS_VolID 39 4 卷序列号 0
BS_VolLab 43 11 卷标 'QingFeng'
BS_FileSysType 54 8 文件系统类型 'FAT12'
引导代码及其他内容 62 448 引导代码及其他数据 引导代码(剩余空间用0填充)
结束标志0xAA55 510 2 第510字节为0x55,第511字节为0xAA 0xAA55


紧接着引导扇区的是两个完全相同的FAT表,每个占用BPB_FATSz16(0x9)个扇区;
第二个FAT之后就是根目录区的第一个扇区,根目录区后面是数据区。
根目录区的位置:引导扇区占1个Sec,两个FAT表共18Sec,所以根目录区开始扇区号为19。
根目录区中由若干个目录入口(Directory Entry)组成,最多有BPB_RootEntCnt个,所以根目录区大小不固定。
每个Directory Entry占32字节。
饿死我了,下楼吃饭,回来 GO ON ....

王旭华 QingFeng Studio 科技创造自由 清风创造和谐
顶部
王旭华 (华子)
管理员
Rank: 9Rank: 9Rank: 9


UID 3
精华 0
积分 0
帖子 53
阅读权限 200
注册 2007-5-29
状态 离线

#2
使用道具
发表于 2007-10-6 10:55 资料 个人空间 主页 短消息 加为好友 QQ
一、基本数据分布

|--------------------| 2879扇区
| 数据区(长度不固定) |
|--------------------|-------
| 根目录区(长度不固定,需计算) |
| |19 扇区
|--------------------|-------
| | 18扇区
| FAT2 |
| |10扇区
|--------------------|-------
| | 9 扇区
| FAT1 |
| |1扇区
|--------------------|-------
| 引导扇区 |
|--------------------| 0扇区

可以看出,FAT1和FAT2紧紧接着引导扇区,每个FAT占9扇区,根目录又紧随其后,从第19扇区开始,但根目录区的大小则不固定,依赖于Directory Entry的数目,最多有BPB_RootEntCnt个。

每个Directory Entry占32字节,其结构如下:
名称 开始字节 长度 内容
DIR_Name 0 0xB 文件名8字节,扩展名3字节
DIR_Attr 0xB 1 文件属性
保留位 0xC 10 保留
DIR_WrtTime 0x16 2 最后一次写入的时间
DIR_WrtDate 0x18 2 最后一次写入的日期
DIR_FstClus 0x1A 2 此文件在数据区和FAT表中的开始簇号
DIR_FileSize 0x1C 4 文件大小


DIR_FstClus:对应了文件的第一个簇号,但需要注意的是:数据区的开始簇号是2,不是0和1,
为此,FAT中的前两个FAT项(0项和1项)不被使用,从第2个FAT项开始有效。

每个FAT项(FATEntry)长度位12Bit,即一个半字节,FAT表中每3个字节存放了2个FATEntry。
3 Bytes:
||||||||||字节3||||||||| |||||||||FATEntry2||||
||||||||||字节2||||||||| => |||||||||||||||||||||||||||||||| => |||||||FATEntry1||||||||||||||||||||||||||||||||||||||||||||FATEntry2||||
||||||||||字节1||||||||| |||||||FATEntry1||||||
FATEntry代表文件的下一个簇号,但如果其值大于等于0xFF8,则表示当前簇是文件的最后一个簇;
如果是0xFF7,则表示这是一个坏簇。

上面已经提到,FAT中第一个有效的FATEntry是2号,对应了数据区的开始簇号。
------------------------------
可以这样理解:FATEntry就是数据区对应簇的next字段,它使一个文件以链表结构存放在数据区各个不连续的簇中,而把"索引"放在FAT中。

FAT16 文件系统

FAT16 文件系统

The boot sector

A boot sector can be found in the first sector of every logical disk. On a floppy disk, the logical disk takes up all of the physical disk and the boot sector lives in the first physical sector. On a hard disk, a boot sector lives at the start of each partition.

An example boot sec

0000 EB 3E 90 4D 53 57 49 4E-34 2E 30 00 02 20 01 00 .>.MSWIN4.0.. ..
0010 02 40 03 00 00 F8 FF 00-3F 00 40 00 3F 00 00 00 .@......?.@.?...
0020 41 DE 1F 00 80 00 29 37-4B 84 32 46 55 4A 49 54 A…..)7K.2FUJIT
0030 53 55 31 32 32 34 46 41-54 31 36 20 20 20 F1 7D SU1224FAT16 .}
0040 FA 33 C9 8E D1 BC FC 7B-16 07 BD 78 00 C5 76 00 .3…..{…x..v.
0050 1E 56 16 55 BF 22 05 89-7E 00 89 4E 02 B1 0B FC .V.U."..~..N….
0060 F3 A4 06 1F BD 00 7C C6-45 FE 0F 8B 46 18 88 45 ……|.E…F..E
0070 F9 FB 38 66 24 7C 04 CD-13 72 3C 8A 46 10 98 F7 ..8f$|…r<.F…
0080 66 16 03 46 1C 13 56 1E-03 46 0E 13 D1 50 52 89 f..F..V..F…PR.
0090 46 FC 89 56 FE B8 20 00-8B 76 11 F7 E6 8B 5E 0B F..V.. ..v….^.
00A0 03 C3 48 F7 F3 01 46 FC-11 4E FE 5A 58 BB 00 07 ..H…F..N.ZX…
00B0 8B FB B1 01 E8 94 00 72-47 38 2D 74 19 B1 0B 56 …….rG8-t…V
00C0 8B 76 3E F3 A6 5E 74 4A-4E 74 0B 03 F9 83 C7 15 .v>..^tJNt……
00D0 3B FB 72 E5 EB D7 2B C9-B8 D8 7D 87 46 3E 3C D8 ;.r…+…}.F><.
00E0 75 99 BE 80 7D AC 98 03-F0 AC 84 C0 74 17 3C FF u…}…….t.<.
00F0 74 09 B4 0E BB 07 00 CD-10 EB EE BE 83 7D EB E5 t…………}..
0100 BE 81 7D EB E0 33 C0 CD-16 5E 1F 8F 04 8F 44 02 ..}..3…^….D.
0110 CD 19 BE 82 7D 8B 7D 0F-83 FF 02 72 C8 8B C7 48 ….}.}….r…H
0120 48 8A 4E 0D F7 E1 03 46-FC 13 56 FE BB 00 07 53 H.N….F..V….S
0130 B1 04 E8 16 00 5B 72 C8-81 3F 4D 5A 75 A7 81 BF …..[r..?Mzu…
0140 00 02 42 4A 75 9F EA 00-02 70 00 50 52 51 91 92 ..Bju….p.PRQ..
0150 33 D2 F7 76 18 91 F7 76-18 42 87 CA F7 76 1A 8A 3..v…v.B…v..
0160 F2 8A 56 24 8A E8 D0 CC-D0 CC 0A CC B8 01 02 CD ..V$............
0170 13 59 5A 58 72 09 40 75-01 42 03 5E 0B E2 CC C3 .YZXr.@u.B.^….
0180 03 18 01 27 0D 0A 49 6E-76 61 6C 69 64 20 73 79 …'..Invalid sy
0190 73 74 65 6D 20 64 69 73-6B FF 0D 0A 44 69 73 6B stem disk…Disk
01A0 20 49 2F 4F 20 65 72 72-6F 72 FF 0D 0A 52 65 70 I/O error…Rep
01B0 6C 61 63 65 20 74 68 65-20 64 69 73 6B 2C 20 61 lace the disk, a
01C0 6E 64 20 74 68 65 6E 20-70 72 65 73 73 20 61 6E nd then press an
01D0 79 20 6B 65 79 0D 0A 00-49 4F 20 20 20 20 20 20 y key…IO
01E0 53 59 53 4D 53 44 4F 53-20 20 20 53 59 53 80 01 SYSMSDOS SYS..
01F0 00 57 49 4E 42 4F 4F 54-20 53 59 53 00 00 55 AA .WINBOOT SYS..U.

Structure of the boot sector
offset size meaning
00 3 jumpinstruction
03 8 system name
0b 33 BIOS parameter block
3e c0 bootstrap code
fe 2 sector signature

Structure of the BIOS paramter block (BPB)
offset length meaning
00 0x2 logical bytes per sector
02 0x1 sectors per cluster
03 0x2 number of reserved sectors starting from 0
05 0x1 number of FATs
06 0x2 number of root dir entries
08 0x2 total sectors. 0 if ofs 15h used
0a 0x1 media descriptor
0b 0x2 number of sectors per FAT
0d 0x2 number of logical sectors per track
0f 0x2 number of logical heads
11 0x4 number of hidden sectors
15 0x4 total sectors
19 0x1 physical drive number
1a 0x1 reserved
1b 0x1 signature byte for extended boot record
1c 0x4 serial number
20 0xb label
2b 0x8 FAT type

Values for the example boot sector
offset length meaning
00 0x2 logical bytes per sector
02 0x1 sectors per cluster
03 0x2 number of reserved sectors starting from 0
05 0x1 number of FATs
06 0x2 number of root dir entries
08 0x2 total sectors. 0 if ofs 15h used
0a 0x1 media descriptor
0b 0x2 number of sectors per FAT
0d 0x2 number of logical sectors per track
0f 0x2 number of logical heads
11 0x4 number of hidden sectors
15 0x4 total sectors
19 0x1 physical drive number
1a 0x1 reserved
1b 0x1 signature byte for extended boot record
1c 0x4 serial number
20 0xb label
2b 0x8 FAT type

Check the C source code to define the FAT boot sector.


Structure of a FAT disk
disk address length contents
0 1 MBR
1 PhysSectPerTrck - 1 Undefined
PhysSectPerTrck 1 Boot sector
PhysSectPerTrck+1 NumFATs*NumSectPerFAT FATs
BookKeep-SectRootDir SectRootDir Root directory
BookKeep LogcDiskSize-BookKeep Data space

SectRootDir = RootDirSize / 16
BookKeep = PhysSectPerTrck + 1 + NumFATs * NumSectPerFAT + SectRootDir

FAT


The FAT is an array of up to 65,536 16-bit unsigned integers. The first 2 and last 16 entries in the FAT are reserved. All other elements are of type: index into the FAT array. Each of the non-reserved FAT entries correspond to a cluster on the disk.
FAT index Meaning as index Meaning as value
0x0000 reserved cluster is available
0x0001 reserved undefined
0x0002-0xffef data cluster next cluster in chain is at this index
0xfff0-0xfff6 reserved undefined
0xfff7 reserved bad cluster
0xfff8-0xffff reserved end of the current cluster chain

FAT entries 0x0000 and 0x0001 contain other information, usually 0xfff8 and 0xffff respectively.
The fragment below is from the start of a FAT
FFF8 FFFF 0000 0004 FFFF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
The fragment above shows a file using clusters 0x0003 & 0x0004.

Folders
A folder is a data structure stored on the disk. The root folder is stored before the data area. Other folders are stored in the data area in the same way as files; These folders may grow in size, shrink in size and be stored non-contiguously in the same way as files. The structure of all folders is as an array of folder entries. The end of the folder is marked by a folder entry starting with a 00h byte.
Folder entry structure
offset length contents
0x00 0x8 name
0x08 0x3 extension
0x0b 0x1 flags
0x0c 0xa reserved
0x16 0x2 time
0x18 0x2 date
0x1a 0x2 first cluter
0x1c 0x4 size

The date field is in DOS date format, and the time field is in DOS time.

FAT16文件系统格式详细说明

FAT16文件系统格式详细说明
2005年6月18日 作者: 发布人:专业嵌入式网站 本文已被浏览 738 次
FAT16文件系统格式详细说明
来源:嵌入式系统 作者:novar

&nbspFAT16文件系统格式说明

硬盘上的数据按照其不同的特点和作用大致可分为5部分:MBR区、DBR区、FAT区、DIR区和DATA区。我们来分别介绍一下:

(1)MBR区(主引导扇区)
MBR (Main&nbspBoot&nbspRecord),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节(偏移0--偏移1BDH),另外的64个字节(偏移1BEH--偏移1FDH)交给了DPT(Disk&nbspPartition&nbspTable硬盘分区表)(见下表),最后两个字节"55,AA"(偏移 1FEH- 偏移1FFH)是分区的结束标志。这个整体构成了硬盘的主引导扇区。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.com)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
偏移 长度 所表达的意义
0 字节 分区状态:如0-->非活动分区
      &nbsp80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型:如82-->&nbspLinux&nbspNative分区
       83-->&nbspLinux&nbspSwap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面
8 双字 该分区起始绝对分区
C 双字 该分区扇区数
下面,我们以一个实例让大家更直观地来了解主引导记录:

例: 80&nbsp01&nbsp01&nbsp00&nbsp0B&nbspFE&nbspBF&nbspFC&nbsp3F&nbsp00&nbsp00&nbsp00&nbsp7E&nbsp86&nbspBB&nbsp00
在这里我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导;"01&nbsp01&nbsp00"表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;"0B"表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS); "FE&nbspBF&nbspFC"表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764; "3F&nbsp00&nbsp00&nbsp00"表示首扇区的相对扇区号为63;"7E&nbsp86& nbspBB&nbsp00"表示总扇区数为12289622。

(2)DBR区
DBR(Dos& nbspBoot&nbspRecord)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios&nbspParameter&nbspBlock)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件(以DOS为例,即是Io.sys和 Msdos.sys)。如果确定存在,就把其读入内存,并把控制权 交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元的大小等重要参数。

(3)FAT区
在DBR之后的是我们比较熟悉的FAT (File&nbspAllocation&nbspTable文件分配表)区。在解释文件分配表的概念之前,我们先来谈谈簇(cluster)的概念。文件占用磁盘空间时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……
通过上文我们已经知道,同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。硬盘上的文件常常要进行创建、删除、增长、缩短等操作。这样操作做的越多,盘上的文件就可能被分得越零碎(每段至少是1簇)。但是,由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。不过,这种以簇为单位的存储法也是有其缺陷的。这主要表现在对空间的利用上。每个文件的最后一簇都有可能有未被完全利用的空间(称为尾簇空间)。一般来说,当文件个数比较多时,平均每个文件要浪费半个簇的空间。
好了,我们言归正传,为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录一个簇的信息。
由于FAT对于文件管理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为"未占用",但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为"坏簇",以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见和为读者所熟悉的是FAT16和FAT32,其中FAT16是指文件分配表使用16位数字,由于16位分配表最多能管理65536(即2的16次方)个簇,也就是所规定的一个硬盘分区。
由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存储容量只有(65536×32&nbspKB)即2048MB,也就是我们常说的2G。现在的硬盘容量是越来越大,由于FAT16对硬盘分区的容量限制,所以当硬盘容量超过2G之后,用户只能将硬盘划分成多个2G的分区后才能正常使用,为此微软公司从Windows&nbsp95&nbspOSR2版本开始使用FAT32标准,即使用32位的文件分配表来管理硬盘文件,这样系统就能为文件分配多达4294967296(即2的32次方)个簇,所以在簇同样为32KB时每个分区容量最大可达65G以上。此外使用 FAT32管理硬盘时,每个逻辑盘中的簇长度也比使用FAT16标准管理的同等容量逻辑盘小很多。由于文件存储在硬盘上占用的磁盘空间以簇为最小单位,所以某一文件即使只有几十个字节也必须占用整个簇,因此逻辑盘的簇单位容量越小越能合理利用存储空间。所以FAT32更适于大硬盘。

(4)DIR区(根目录区)
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。

(5)数据(DATA)区
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。

FW: [嘻嘻哈哈] gcc的编译参数



 
后来找了一下gcc的编译参数(摘自http://tingxx.blogchina.com/)

gcc的一些重要参数
1. -I 指定头文件搜索路径(I 表include)
如 $gcc -c hello.c -o hello.o -I/usr/include
2.-L 指定要连接的库所在的目录
-l 指定要连接的库的名字
如$gcc main.o -L/usr/lib -lqt -o hello
3. -D 定义宏(D-define)
-D定义宏有两种情况,一种是-DMACRO 相当于程序中使用#define MACRO 另外可以-DMACRO=A 相当于程序中使用#define MACRO A 这只是一个编绎参数,在连接时没有意义
如: $gcc -c hello.c -o hello.o -DDEBUG
上面为hello.c定义了一个DEBUG宏,某些情况下使用-D 代替直接在文件中使用#define,也是为了避免修改源代码双。例如一个程序希望在开发调试的时候能打印出调试信息,而正式发布的时候就不用打印了,而且发布前不用修改源代码双。可以这样
#ifdefine DEBUG
printf("debug message\n");

gcc基本的使用方法及常用指令(zt)

gcc基本的使用方法及常用指令
前言

  编译器在编译过程中,先将程式码编译成 object 档,然後再和程式库联结,成为可执行档。故一个编译器须提供的参数主要有几类:
  1.指定编译器编出的object 档或是可执行档档名。
  2.在编译过程做最佳化,可提升程式的执行速度。
  3.设定搜寻程式库的标头档 (header file) 及程式库档的目录及指定程式库档档名。
  提供进一步的资讯以便使用者找寻程式中的错误。

  以下便以这四个大类分别介绍。
  注意:下面在不同类别中所介绍的参数,几乎都可以混合著使用。
  1.设定编译出的 object 档档名或是可执行档档名:
  参数: -o out_put_filename
  说明: 指定编译出的档名为 out_put_filename。
  范例: 本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。
  gcc test.c -o test

  2.在编译过程做最佳化
  参数: -O
  说明: 在编译过程做最佳化,以提升增快程式执行速度。
  范例: 本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。 
  gcc -O test.c -o test

  3.设定搜寻标头档目录、程式库档的目录及指定程式库档。
  3.1设定搜寻标头档目录
  参数: -Idir_name
  说明: 将目录 'dir_name' 设定为搜寻标头档目录之一。

  3.2设定搜寻程式库目录。
  参数: -Ldir_name
  说明: 将目录 'dir_name' 设定为搜寻程式库目录之一。

  3.3设定程式库档案。
  参数: -lname
  说明: 联结程式库 libname.a 。
  
  范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。
  gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
  范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在 /usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为 libX11.a。
  gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test 
  提供进一步的资讯以便使用者找寻程式中的错误。

  参数: -Wall
  说明: 输出较多的警告讯息,以便找出程式的错误。
  范例: 编译 test.c 时输出较多的警告讯息。
  gcc -Wall test.c
  
  参数: -g
  说明: 在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错程式,则须将参数改为 -gdwarf )。
  范例: 将 'test.c' 编译成可执行档 'test',并附加除错资讯。
  gcc -g test.c -o test
  
  进阶参数
  1. 仅编译成 object 档。
  参数: -c
  说明: 仅编译成 object 档而不进行程式库联结。
  范例: 将 test.c 编译成 object 档 test.o。
  gcc -c test.c -o test.o
  
  2. 联结数个 object 成可执行档。
  范例: 将 'test1.o'、'test2.o' 和程式库联结後成为可执行档 test。
  gcc test1.o test2.o -o test
  
  3. 观察宏展开情形:
  参数: -E
  说明:展开程式中的宏以便了解巨集是否依照预期方式展开。
  范例:将 test1.c 中的宏展开後储存到 test1.c.ext 。
  gcc -E test1.c > test1.c.ext
  
  4. 产生组合语言程式码:
  参数: -S
  范例:编译 test.c 产生对应的组合语言程式码档 test.s。
  gcc -S test.c -o test.s


GCC(1)   GNU Tools   GCC(1)
NAME
    gcc, g++ - GNU project C and C++ Compiler (v2.7)

SYNOPSIS
    gcc [ option | filename ]...
    g++ [ option | filename ]...

WARNING
    The information in this man page is an extract from the
    full documentation of the GNU C compiler, and is limited
    to the meaning of the options.

    This man page is not kept up to date except when volun-
    teers want to maintain it.  If you find a discrepancy
    between the man page and the software, please check the
    Info file, which is the authoritative documentation.

    If we find that the things in this man page that are out
    of date cause significant confusion or complaints, we will
    stop distributing the man page. The alternative, updating
    the man page when we update the Info file, is impossible
    because the rest of the work of maintaining GNU CC leaves
    us no time for that. The GNU project regards man pages as
    obsolete and should not let them take time away from other
    things.

    For complete and current documentation, refer to the Info
    file `gcc' or the manual Using and Porting GNU CC (for
    version 2.0). Both are made from the Texinfo source file
    gcc.texinfo.

DESCRIPTION
    The C and C++ compilers are integrated.  Both process
    input files through one or more of four stages: prepro-
    cessing, compilation, assembly, and linking. Source file-
    name suffixes identify the source language, but which name
    you use for the compiler governs default assumptions:

    gcc  assumes preprocessed (.i) files are C and assumes C
   style linking.

    g++  assumes preprocessed (.i) files are C++ and assumes
   C++ style linking.

    Suffixes of source file names indicate the language and
    kind of processing to be done:

    .c  C source; preprocess, compile, assemble
    .C  C++ source; preprocess, compile, assemble
    .cc  C++ source; preprocess, compile, assemble
    .cxx C++ source; preprocess, compile, assemble
    .m  Objective-C source; preprocess, compile, assemble
    .i  preprocessed C; compile, assemble
    .ii  preprocessed C++; compile, assemble


GNU Tools   1993/10/13 1
GCC(1)   GNU Tools   GCC(1)


    .s  Assembler source; assemble
    .S  Assembler source; preprocess, assemble
    .h  Preprocessor file; not usually named on command line

    Files with other suffixes are passed to the linker. Com-
    mon cases include:

    .o  Object file
    .a  Archive file

    Linking is always the last stage unless you use one of the
    -c, -S, or -E options to avoid it (or unless compilation
    errors stop the whole process). For the link stage, all
    .o files corresponding to source files, -l libraries,
    unrecognized filenames (including named .o object files
    and .a archives) are passed to the linker in command-line
    order.

OPTIONS
    Options must be separate: `-dr' is quite different from
    `-d -r '.

    Most `-f' and `-W' options have two contrary forms: -fname
    and -fno-name (or -Wname and -Wno-name).  Only the non-
    default forms are shown here.

    Here is a summary of all the options, grouped by type.
    Explanations are in the following sections.

    Overall Options
   -c -S -E -o file -pipe -v -x language

    Language Options
   -ansi -fall-virtual -fcond-mismatch
   -fdollars-in-identifiers -fenum-int-equiv
   -fexternal-templates -fno-asm -fno-builtin
   -fno-strict-prototype -fsigned-bitfields
   -fsigned-char -fthis-is-variable
   -funsigned-bitfields -funsigned-char
   -fwritable-strings -traditional -traditional-cpp
   -trigraphs

    Warning Options
   -fsyntax-only -pedantic -pedantic-errors -w -W
   -Wall -Waggregate-return -Wcast-align -Wcast-qual
   -Wchar-subscript -Wcomment -Wconversion
   -Wenum-clash -Werror -Wformat -Wid-clash-len
   -Wimplicit -Winline -Wmissing-prototypes
   -Wmissing-declarations -Wnested-externs -Wno-import
   -Wparentheses -Wpointer-arith -Wredundant-decls
   -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
   -Wtemplate-debugging -Wtraditional -Wtrigraphs
   -Wuninitialized -Wunused -Wwrite-strings

GNU Tools   1993/10/13 2
GCC(1)   GNU Tools   GCC(1)


    Debugging Options
   -a -dletters -fpretend-float -g -glevel -gcoff
   -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
   -ggdb -p -pg -save-temps -print-file-name=library
   -print-libgcc-file-name -print-prog-name=program

    Optimization Options
   -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
   -fdelayed-branch -felide-constructors
   -fexpensive-optimizations -ffast-math -ffloat-store
   -fforce-addr -fforce-mem -finline-functions
   -fkeep-inline-functions -fmemoize-lookups
   -fno-default-inline -fno-defer-pop
   -fno-function-cse -fno-inline -fno-peephole
   -fomit-frame-pointer -frerun-cse-after-loop
   -fschedule-insns -fschedule-insns2
   -fstrength-reduce -fthread-jumps -funroll-all-loops
   -funroll-loops -O -O2

    Preprocessor Options
   -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
   -idirafter dir -include file -imacros file -iprefix
   file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
   -Umacro -undef

    Assembler Option
   -Wa,option

    Linker Options
   -llibrary -nostartfiles -nostdlib -static -shared
   -symbolic -Xlinker option -Wl,option -u symbol

    Directory Options
   -Bprefix -Idir -I- -Ldir

    Target Options
   -b machine -V version

    Configuration Dependent Options
   M680x0 Options
   -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
   -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
   -mrtd -mshort -msoft-float

   VAX Options
   -mg -mgnu -munix

   SPARC Options
   -mepilogue -mfpu -mhard-float -mno-fpu
   -mno-epilogue -msoft-float -msparclite -mv8
   -msupersparc -mcypress

   Convex Options
   -margcount -mc1 -mc2 -mnoargcount


GNU Tools   1993/10/13 3
GCC(1)   GNU Tools   GCC(1)


   AMD29K Options
   -m29000 -m29050 -mbw -mdw -mkernel-registers
   -mlarge -mnbw -mnodw -msmall -mstack-check
   -muser-registers

   M88K Options
   -m88000 -m88100 -m88110 -mbig-pic
   -mcheck-zero-division -mhandle-large-shift
   -midentify-revision -mno-check-zero-division
   -mno-ocs-debug-info -mno-ocs-frame-position
   -mno-optimize-arg-area -mno-serialize-volatile
   -mno-underscores -mocs-debug-info
   -mocs-frame-position -moptimize-arg-area
   -mserialize-volatile -mshort-data-num -msvr3 -msvr4
   -mtrap-large-shift -muse-div-instruction
   -mversion-03.00 -mwarn-passed-structs

   RS6000 Options
   -mfp-in-toc -mno-fop-in-toc

   RT Options
   -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
   -mfull-fp-blocks -mhc-struct-return -min-line-mul
   -mminimum-fp-blocks -mnohc-struct-return

   MIPS Options
   -mcpu=cpu type -mips2 -mips3 -mint64 -mlong64
   -mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
   -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
   -mno-memcpy -mno-mips-tfile -mmips-tfile
   -msoft-float -mhard-float -mabicalls -mno-abicalls
   -mhalf-pic -mno-half-pic -G num -nocpp

   i386 Options
   -m486 -mno-486 -msoft-float -mno-fp-ret-in-387

   HPPA Options
   -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
   -mno-shared-libs -mlong-calls -mdisable-fpregs
   -mdisable-indexing -mtrailing-colon

   i960 Options
   -mcpu-type -mnumerics -msoft-float
   -mleaf-procedures -mno-leaf-procedures -mtail-call
   -mno-tail-call -mcomplex-addr -mno-complex-addr
   -mcode-align -mno-code-align -mic-compat
   -mic2.0-compat -mic3.0-compat -masm-compat
   -mintel-asm -mstrict-align -mno-strict-align
   -mold-align -mno-old-align

   DEC Alpha Options
   -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

   System V Options


GNU Tools   1993/10/13 4
GCC(1)   GNU Tools   GCC(1)


   -G -Qy -Qn -YP,paths -Ym,dir

    Code Generation Options
   -fcall-saved-reg -fcall-used-reg -ffixed-reg
   -finhibit-size-directive -fnonnull-objects
   -fno-common -fno-ident -fno-gnu-linker
   -fpcc-struct-return -fpic -fPIC -freg-struct-return
   -fshared-data -fshort-enums -fshort-double
   -fvolatile -fvolatile-global -fverbose-asm

OVERALL OPTIONS
    -x language
   Specify explicitly the language for the following
   input files (rather than choosing a default based
   on the file name suffix) . This option applies to
   all following input files until the next `-x' op-
   tion.  Possible  values of language are `c',
   `objective-c', `c-header', `c++',  `cpp-output',
   `assembler', and `assembler-with-cpp'.

    -x none
   Turn off any specification of a language, so that
   subsequent files are handled according to their
   file name suffixes (as they are if `-x' has not
   been used at all).

    If you want only some of the four stages (preprocess, com-
    pile, assemble, link), you can use `-x' (or filename suf-
    fixes) to tell gcc where to start, and one of the options
    `-c', `-S', or `-E' to say where gcc is to stop. Note
    that some combinations (for example, `-x cpp-output -E')
    instruct gcc to do nothing at all.

    -c   Compile or assemble the source files, but do not
   link. The compiler output is an object file corre-
   sponding to each source file.

   By default, GCC makes the object file name for a
   source file by replacing the suffix `.c', `.i',
   `.s', etc., with `.o'. Use -o to select another
   name.

   GCC ignores any unrecognized input files (those
   that do not require compilation or assembly) with
   the -c option.

    -S   Stop after the stage of compilation proper; do not
   assemble. The output is an assembler code file for
   each non-assembler input file specified.

   By default, GCC makes the assembler file name for a
   source file by replacing the suffix `.c', `.i',
   etc., with `.s'. Use -o to select another name.

GNU Tools   1993/10/13 5
GCC(1)   GNU Tools   GCC(1)


   GCC ignores any input files that don't require com-
   pilation.

    -E   Stop after the preprocessing stage; do not run the
   compiler proper. The output is preprocessed source
   code, which is sent to the standard output.

   GCC ignores input files which don't require prepro-
   cessing.

    -o file
   Place output in file file. This applies regardless
   to whatever sort of output GCC is producing,
   whether it be an executable file, an object file,
   an assembler file or preprocessed C code.

   Since only one output file can be specified, it
   does not make sense to use `-o' when compiling more
   than one input file, unless you are producing an
   executable file as output.

   If you do not specify `-o', the default is to put
   an executable file in `a.out', the object file for
   `source.suffix' in `source.o', its assembler file
   in `source.s', and all preprocessed C source on
   standard output.

    -v   Print (on standard error output) the commands exe-
   cuted to run the stages of compilation. Also print
   the version number of the compiler driver program
   and of the preprocessor and the compiler proper.

    -pipe Use pipes rather than temporary files for communi-
   cation between the various stages of compilation.
   This fails to work on some systems where the assem-
   bler cannot read from a pipe; but the GNU assembler
   has no trouble.


LANGUAGE OPTIONS
    The following options control the dialect of C that the
    compiler accepts:

    -ansi Support all ANSI standard C programs.

   This turns off certain features of GNU C that are
   incompatible with ANSI C, such as the asm, inline
   and typeof keywords, and predefined macros such as
   unix and vax that identify the type of system you
   are using. It also enables the undesirable and
   rarely used ANSI trigraph feature, and disallows
   `$' as part of identifiers.

   The alternate keywords __asm__,  __extension__,


GNU Tools   1993/10/13 6
GCC(1)   GNU Tools   GCC(1)


   __inline__ and __typeof__ continue to work despite
   `-ansi'. You would not want to use them in an ANSI
   C program, of course, but it is useful to put them
   in header files that might be included in compila-
   tions done with `-ansi'.  Alternate predefined
   macros such as __unix__ and __vax__ are also avail-
   able, with or without `-ansi'.

   The `-ansi' option does not cause non-ANSI programs
   to be rejected gratuitously. For that, `-pedantic'
   is required in addition to `-ansi'.

   The preprocessor predefines a macro __STRICT_ANSI__
   when you use the `-ansi' option. Some header files
   may notice this macro and refrain from declaring
   certain functions or defining certain macros that
   the ANSI standard doesn't call for; this is to
   avoid interfering with any programs that might use
   these names for other things.

    -fno-asm
   Do not recognize asm, inline or typeof as a key-
   word. These words may then be used as identifiers.
   You can use __asm__, __inline__ and __typeof__ in-
   stead. `-ansi' implies `-fno-asm'.

    -fno-builtin
   Don't recognize built-in functions that do not be-
   gin with two leading underscores. Currently, the
   functions affected include _exit, abort, abs, allo-
   ca, cos, exit, fabs, labs, memcmp, memcpy, sin,
   sqrt, strcmp, strcpy, and strlen.

   The `-ansi' option prevents alloca and _exit from
   being builtin functions.

    -fno-strict-prototype
   Treat a function declaration with no arguments,
   such as `int foo ();', as C would treat it--as say-
   ing nothing about the number of arguments or their
   types (C++ only). Normally, such a declaration in
   C++ means that the function foo takes no arguments.

    -trigraphs
   Support ANSI C trigraphs. The `-ansi' option im-
   plies `-trigraphs'.

    -traditional
   Attempt to support some aspects of traditional C
   compilers. For details, see the GNU C Manual; the
   duplicate list here has been deleted so that we
   won't get complaints when it is out of date.

   But one note about C++ programs only (not C).


GNU Tools   1993/10/13 7
GCC(1)   GNU Tools   GCC(1)


   `-traditional' has one additional effect for C++:
   assignment to this is permitted. This is the same
   as the effect of `-fthis-is-variable'.

    -traditional-cpp
   Attempt to support some aspects of traditional C
   preprocessors.  This includes the  items  that
   specifically mention the preprocessor above, but
   none of the other effects of `-traditional'.

    -fdollars-in-identifiers
   Permit the use of `$' in identifiers (C++ only).
   You can also use `-fno-dollars-in-identifiers' to
   explicitly prohibit use of `$'. (GNU C++ allows
   `$' by default on some target systems but not oth-
   ers.)

    -fenum-int-equiv
   Permit implicit conversion of int to enumeration
   types (C++ only). Normally GNU C++ allows conver-
   sion of enum to int, but not the other way around.

    -fexternal-templates
   Produce smaller code for template declarations, by
   generating only a single copy of each template
   function where it is defined (C++ only). To use
   this option successfully, you must also mark all
   files that use templates with either `#pragma
   implementation' (the  definition)  or `#pragma
   interface' (declarations).

   When   your code is compiled   with
   `-fexternal-templates', all template instantiations
   are external.  You must arrange for all necessary
   instantiations to appear in the implementation
   file; you can do this with a typedef that refer-
   ences each instantiation needed. Conversely, when
   you  compile using the default   option
   `-fno-external-templates', all template instantia-
   tions are explicitly internal.

    -fall-virtual
   Treat all possible member functions as virtual, im-
   plicitly. All member functions (except for con-
   structor functions and new or delete member opera-
   tors) are treated as virtual functions of the class
   where they appear.

   This does not mean that all calls to these member
   functions will be made through the internal table
   of virtual functions. Under some circumstances,
   the compiler can determine that a call to a given
   virtual function can be made directly; in these
   cases the calls are direct in any case.

GCC 编译器使用指南

使用语法:
gcc [ option | filename ]...
g++ [ option | filename ]...

其中 option 为 gcc 使用时的选项(后面会再详述),
而 filename 为欲以 gcc 处理的文件
说明:
这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产
生一个新的程序需要经过四个阶段:预处理、编译、汇编,连结,
而这两个编译器都能将输入的文件做不同阶段的处理。虽然原始程序
的扩展名可用来分辨编写原始程序码所用的语言,但不同的 compiler
,其预设的处理程序却各不相同:

gcc 预设经由预处理过(扩展名为.i)的文件为 C 语言,并於程
式连结阶段以 C 的连结方式处理。

g++ 预设经由预处理过(扩展名为.i)的文件为 C++ 语言,并於程

序连结阶段以 C++ 的连结方式处理。


原始程序码的扩展名指出所用编写程序所用的语言,以及相对应的处
理方法:

.c C 原始程序 ; 预处理、编译、汇编
.C C++ 原始程序 ; 预处理、编译、汇编
.cc C++ 原始程序 ; 预处理、编译、汇编
.cxx C++ 原始程序 ; 预处理、编译、汇编
.m Objective-C 原始程序 ; 预处理、编译、汇编
.i 已经过预处理之 C 原始程序 ; 编译、汇编
.ii 已经过预处理之 C++ 原始程序 ; 编译、汇编
.s 组合语言原始程序 ; 汇编
.S 组合语言原始程序 ; 预处理、汇编
.h 预处理文件(标头文件) ; (不常出现在指令行)


其他扩展名的文件是由连结程序来处理,通常有:

.o Object file
.a Archive file


除非编译过程出现错误,否则 "连结" 一定是产生一个新程序的最
後阶段。然而你也可以以 -c、-s 或 -E 等选项,将整个过程自四
个阶段中的其中一个停止。在连结阶段,所有与原始码相对应的
.o 文件、程序库、和其他无法自文件名辨明属性的文件(包括不以 .o
为扩展名的 object file 以及扩展名为 .a 的 archive file)都会
交由连结程序来处理(在指令行将那些文件当作连结程序的参数传给
连结程序)。


选项:
不同的选项必须分开来下:例如 `-dr' 这个选项就与 `-d -r' 大
不相同。

绝大部份的 `-f' 及 `-W' 选项都有正反两种形式:-fname 及
-fno-name (或 -Wname 及 -Wno-name)。以下只列出非预设的那个
形式。

以下是所有选项的摘要。以形式来分类。选项的意义将另辟小节说
明。

一般性(概略、常用的)选项
-c -S -E -o file -pipe -v -x language

程序语言选项
-ansi -fall-virtual -fcond-mismatch
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-fsigned-char -fthis-is-variable
-funsigned-bitfields -funsigned-char
-fwritable-strings -traditional -traditional-cpp
-trigraphs

编译时的警告选项
-fsyntax-only -pedantic -pedantic-errors -w -W
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscript -Wcomment -Wconversion
-Wenum-clash -Werror -Wformat -Wid-clash-len
-Wimplicit -Winline -Wmissing-prototypes
-Wmissing-declarations -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
-Wtemplate-debugging -Wtraditional -Wtrigraphs
-Wuninitialized -Wunused -Wwrite-strings

除错选项
-a -dletters -fpretend-float -g -glevel -gcoff
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program

最佳化选项
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constructors
-fexpensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-fno-default-inline -fno-defer-pop
-fno-function-cse -fno-inline -fno-peephole
-fomit-frame-pointer -frerun-cse-after-loop
-fschedule-insns -fschedule-insns2
-fstrength-reduce -fthread-jumps -funroll-all-loops
-funroll-loops -O -O2

预处理选项
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef

汇编程序选项
-Wa,option

连结程序选项
-llibrary -nostartfiles -nostdlib -static -shared
-symbolic -Xlinker option -Wl,option -u symbol

目录选项
-Bprefix -Idir -I- -Ldir

Target Options
-b machine -V version

与机器(平台)相关的选项
M680x0 Options
-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
-mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
-mrtd -mshort -msoft-float

VAX Options
-mg -mgnu -munix

SPARC Options
-mepilogue -mfpu -mhard-float -mno-fpu
-mno-epilogue -msoft-float -msparclite -mv8
-msupersparc -mcypress

Convex Options
-margcount -mc1 -mc2 -mnoargcount

AMD29K Options
-m29000 -m29050 -mbw -mdw -mkernel-registers
-mlarge -mnbw -mnodw -msmall -mstack-check
-muser-registers

M88K Options
-m88000 -m88100 -m88110 -mbig-pic
-mcheck-zero-division -mhandle-large-shift
-midentify-revision -mno-check-zero-division
-mno-ocs-debug-info -mno-ocs-frame-position
-mno-optimize-arg-area -mno-serialize-volatile
-mno-underscores -mocs-debug-info
-mocs-frame-position -moptimize-arg-area
-mserialize-volatile -mshort-data-num -msvr3 -msvr4
-mtrap-large-shift -muse-div-instruction
-mversion-03.00 -mwarn-passed-structs

RS6000 Options
-mfp-in-toc -mno-fop-in-toc

RT Options
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
-mfull-fp-blocks -mhc-struct-return -min-line-mul
-mminimum-fp-blocks -mnohc-struct-return

MIPS Options
-mcpu=cpu type -mips2 -mips3 -mint64 -mlong64
-mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
-mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
-mno-memcpy -mno-mips-tfile -mmips-tfile
-msoft-float -mhard-float -mabicalls -mno-abicalls
-mhalf-pic -mno-half-pic -G num -nocpp

i386 Options
-m486 -mno-486 -msoft-float -mno-fp-ret-in-387

HPPA Options
-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
-mno-shared-libs -mlong-calls -mdisable-fpregs
-mdisable-indexing -mtrailing-colon

i960 Options
-mcpu-type -mnumerics -msoft-float
-mleaf-procedures -mno-leaf-procedures -mtail-call
-mno-tail-call -mcomplex-addr -mno-complex-addr
-mcode-align -mno-code-align -mic-compat
-mic2.0-compat -mic3.0-compat -masm-compat
-mintel-asm -mstrict-align -mno-strict-align
-mold-align -mno-old-align

DEC Alpha Options
-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

System V Options
-G -Qy -Qn -YP,paths -Ym,dir

Code Generation Options
-fcall-saved-reg -fcall-used-reg -ffixed-reg
-finhibit-size-directive -fnonnull-objects
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC
-freg-struct-returno -fshared-data -fshort-enums
-fshort-double -fvolatile -fvolatile-global
-fverbose-asm

PRAGMAS
Two `#pragma' directives are supported for GNU C++, to
permit using the same header file for two purposes: as a
definition of interfaces to a given object class, and as
the full definition of the contents of that object class.

#pragma interface
(C++ only.) Use this directive in header files
that define object classes, to save space in most
of the object files that use those classes. Nor-
mally, local copies of certain information (backup
copies of inline member functions, debugging infor-
mation, and the internal tables that implement vir-
tual functions) must be kept in each object file
that includes class definitions. You can use this
pragma to avoid such duplication. When a header
file containing `#pragma interface' is included in
a compilation, this auxiliary information will not
be generated (unless the main input source file it-
self uses `#pragma implementation'). Instead, the
object files will contain references to be resolved
at link time.

#pragma implementation

#pragma implementation "objects.h"
(C++ only.) Use this pragma in a main input file,
when you want full output from included header
files to be generated (and made globally visible).
The included header file, in turn, should use
`#pragma interface'. Backup copies of inline mem-
ber functions, debugging information, and the in-
ternal tables used to implement virtual functions
are all generated in implementation files.

If you use `#pragma implementation' with no argu-
ment, it applies to an include file with the same
basename as your source file; for example, in
`allclass.cc', `#pragma implementation' by itself
is equivalent to `#pragma implementation
"allclass.h"'. Use the string argument if you want
a single implementation file to include code from
multiple header files.

There is no way to split up the contents of a sin-
gle header file into multiple implementation files.

文件说明
file.c C source file
file.h C header (preprocessor) file
file.i 经预处理过的 C source file
file.C C++ source file
file.cc C++ source file
file.cxx C++ source file
file.m Objective-C source file
file.s assembly language file
file.o object file
a.out link edited output
TMPDIR/cc* temporary files
LIBDIR/cpp preprocessor
LIBDIR/cc1 compiler for C
LIBDIR/cc1plus compiler for C++
LIBDIR/collect linker front end needed on some machines
LIBDIR/libgcc.a GCC subroutine library
/lib/crt[01n].o start-up routine
LIBDIR/ccrt0 additional start-up routine for C++
/lib/libc.a standard C library, 参阅 man page intro(3)
/usr/include standard directory for #include files
LIBDIR/include standard gcc directory for #include files
LIBDIR/g++-include additional g++ directory for #include

LIBDIR is usually /usr/local/lib/machine/version.
TMPDIR comes from the environment variable TMPDIR (default
/usr/tmp if available, else /tmp).

2008年1月14日星期一

Linux基本操作命令

Linux基本操作命令

首先介绍一个名词"控制台(console)",它就是我们通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如dos命令就是控制台命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。

ls
这个命令就相当于dos下的dir命令一样,肯定是我第一个就要介绍的,这也是Linux控制台命令中最为重要几个命令之一。ls最常用的参数有三个: -a -l -F。

ls -a

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来。

ls -l(这个参数是字母L的小写,不是数字1)

这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到ls -l这个指令。例如我在某个目录下键入ls -l可能会显示如下信息(最上面两行是我自己加的):
位置1 2 3 4 5 6 7
文件属性 文件数 拥有者 所属的group 文件大小 建档日期 文件名
drwx------ 2 Guest users 1024 Nov 21 21:05 Mail
-rwx--x--x 1 root root 89080 Nov 7 22:41 tar*
-rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*
lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip
-rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh*
-rwsr-x--- 1 root bin 9853 Aug 15 5:46 su*
下面,我为大家解释一下这些显示内容的意义。
第一个栏位,表示文件的属性。Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。但是这里有十个格子可以添(具体程序实现时,实际上是十个bit位)。第一个小格是特殊表示格,表示目录或连结文件等等,d表示目录,例如drwx------;l表示连结文件,如 lrwxrwxrwx;如果是以一横"-"表示,则表示这是文件。其余剩下的格子就以每3格为一个单位。因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):
rwx(Owner)r-x(Group)r-x(Other)
这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。
第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。
第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。
第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,你当然可以用其它参数使文件显示的单位不同,如使用ls �k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。
第六个栏位,表示创建日期。以"月,日,时间"的格式表示,如Aug 15 5:46表示8月15日早上5:46分。
第七个栏位,表示文件名。我们可以用ls �a显示隐藏的文件名。

ls �F(注意,是大写的F)

使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。

cd
这个命令是用来进出目录的,它的使用方法和在dos下没什么两样,所以我觉得没什么可说的,但有两点我补充一下。首先,和dos不同的是Linux的目录对大小写是敏感的,如果大小写没拼对,你的cd操作是成功不了的。其次,cd如果直接输入,cd后面不加任何东西,会回到使用者自己的Home Directory。假设如果是root,那就是回到/root.这个功能同cd ~是一样的。

mkdir、rmdir
mkdir命令用来建立新的目录,rmdir用来删除以建立的目录,这两个指令的功能不再多加介绍,他们同dos下的md,rd功能和用法都是基本一样的。

cp
这个命令相当于dos下面的copy命令,具体用法是:cp �r 源文件(source) 目的文件(target)
参数r是指连同元文件中的子目录一同拷贝。熟悉dos的读者用起这个命令来会觉得更方便,毕竟比在dos下面要少敲两下键盘。

rm
这个命令是用来删除文件的,和dos下面的rm(删除一个空目录)是有区别的,大家千万要注意。Rm命令常用的参数有三个: -i,-r,-f。
比如我现在要删除一个名字为text的一个文件:rm �i test
系统会询问我们:"rm:remove 'test'?y",敲了回车以后,这个文件才会真的被删除。之所以要这样做,是因为linux不象dos那样有undelete的命令,或者是可以用 pctool等工具将删除过的文件救回来,linux中删除过的文件是救不回来的,所以使用这个参数在删除前让你再确定一遍,是很有必要的。
rm �r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能上和rmdir相似。
rm �f 文件名(目录名):这个操作可以进行强制删除。

mv
这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名。它的用法同dos下面的move基本相同,这里不再多讲。当使用该命令来移动目录时,他会连同该目录下面的子目录也一同移走。另外因为linux下面没有rename的命令,所以如果你想给一个文件或目录重命名时可以用以下方法:mv 原文件(目录)名 新的文件(目录)名。

du,df
du命令可以显示目前的目录所占的磁盘空间,df命令可以显示目前磁盘剩余的磁盘空间。如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况(这个功能可是dos没有的呦)。不过我一般不喜欢用du,因为它给出的信息是在是太多了,我看不过来,而df这个命令我是最常用的,因为磁盘上还剩多少空间对我来说是很重要的。

cat
这个命令是linux中非常重要的一个命令,它的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。它的用法如下:
cat text 显示text这个文件;
cat file1 file2 依顺序显示file1,file2的内容;
cat file1 file2>file3 把file1,file2的内容结合起来,再"重定向(>)"到file3文件中。
"〉"是一个非常有趣的符号,是往右重定向的意思,就是把左边的结果当成是输入,然后输入到file3这个文件中。这里要注意一点是file3是在重定向以前还未存在的文件,如果file3是已经存在的文件,那么它本身的内容被覆盖,而变成file1+file2的内容。如果〉左边没有文件的名称,而右边有文件名,例如:
cat >file1:结果是会"空出一行空白行",等待你输入文字,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会结束编辑,并产生 file1这个文件,而file1的内容就是你刚刚输入的内容。这个过程和dos里面的copy con file1的结果是一样的。
另外,如果你使用如下的指令:
cat file1>>file2:这将变成将file1的文件内容"附加"到file2的文件后面,而file2的内容依然存在,这种重定向符〉〉比〉常用,可以多多利用。

more,less
这是两个显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面,用cat来看实在是不理想,就可以试试more和less两个指令。 More指令可以使超过一页的文件临时停留在屏幕,等你按任何的一个键以后,才继续显示。而less除了有more的功能以外,还可以用方向键往上或网下的滚动文件,所以你随意浏览,阅读文章时,less是个非常好的选择。

clear
这个命令是用来清除屏幕的,它不需要任何参数,和dos下面的clr具有相同的功能,如果你觉得屏幕太紊乱,就可以使用它清除屏幕上的信息。

pwd
这个命令的作用是显示用户当前的工作路径,这个命令不用多说,大家一试即知。

ln
这是linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln �s 源文件 目标文件。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln �s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。
这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接和硬链接两种,软链接就是ln �s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls �l命令去察看,就可以看到显示的link的路径了。

man
如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man。Man实际上就是察看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令。man是manual(手册)的缩写字,它的说明非常的详细,但是因为它都是英文,看起来非常的头痛。建议大家需要的时候再去看man,平常吗,记得一些基本用法就可以了。

logout
一看就知道了,这是退出系统的命令,我就不多说了。要强调的一点是,linux是多用户多进程的操作系统,因此如果你不用了,退出系统就可以了,关闭系统你就不用操心了,那是系统管理员的事情。但有一点切记,即便你是单机使用linux,logout以后也不能直接关机,因为这不是关机的命令。
Best Regards
Miao Jia Hong

Cygwin的使用方法

由于自己的项目需要使用Linux内核,所以自己在windows下安装了一个Linux虚拟机!自己实在忍受不了这种速度,随想用cygwin进行替代,毕竟我只是使用Linux内核的部分命令就好。今天下午进行了实验,效果不错,从网上找到了这篇文章,做为cygwin的入门文章!写的不错, enjoy it!

原文如下:

By EnterBD[BCT]
QQ:4791821
E-Mail:Taynni@Gmail.com
欢迎转载和指出错误,但请保留以上信息,谢谢.

0:简介
1:下载和安装
2:使用

简介
Cygwin是一个运行于Windows下的免费的UNIX的子系统,使用一个Dll(动态链接库)来

实现,这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在Windows下,大家可以想

一下,你在运行Windows的同时,也可以使用VI,BASH,TAR,SED等UNIX下的工具,不是很好吗?这个VM

虚拟机有很相同的原理,但是VM是虚拟多个,而Cygwin是同时使用Windows和UNIX,很爽吧,这样

对于那些在Windows和Unix下移植的程序来说是比较简单的事情了.

一:下载和安装

其下载安装程序在Http://www.cygwin.com,下载安装程序以后,运行,然后会要你选择是通过什么方

式进行下载安装所需要的文件,有三种方式,Http.Ftp.本地,我建议你首先通过Http和Ftp把安装所需要的

文件全部下回来以后选择本地安装比较好,在线安装比较慢,会是一个很长的等待,虽然所需要的文件

不大,但是全部安装的话会是4G大小,还是有选择性的安装吧,在安装界面,有Prev(老版本),Curr(当前版本)
Exp(最新版本测试版本),苹果这里建议你选择Curr,然后你单击View按钮,这样你可以在可以使用的安装

文件之间进行选择性的安装,如果你真的想全部安装的话,那么左键点击一下最上面的All,然后看到

INSTALL,这样选择了全部,进行全部安装便可以了,安装完以后,会在桌面产生一个图标,双击这个图标,

呵呵,你便可以使用Cygwin了.关于安装的具体参数方法,网络上有比较详细的介绍,我就不罗嗦了.

PS:下载方面我建议如下:你可以下载以下几个版本的Cygwin:

您现在可以使用Cygwin.cn的镜像,详情请参考[安装]

原始站: http://sources.redhat.com/cygwin/;
印地安那大学的免安砚光盘cygwin, 叫做 XLiveCD:http://xlivecd.indiana.edu/ ,
USA, Indiana ftp://ftp.ussg.indiana.edu/pub/xlivecd/xlivecd-20041201.iso
Mirrors:
Belgium, Geel ftp://sin.khk.be/mirror/xlivecd/xlivecd-20041201.iso
Germany, Bochum ftp://linux.rz.ruhr-uni-bochum.de/xlivecd/xlivecd-20041201.iso
Germany, Bochum http://linux.rz.ruhr-uni-bochum.de/download/xlivecd/xlivecd-20041201.iso
Sweden, Ume? http://ftp.acc.umu.se/mirror/xlivecd/xlivecd-20041201.iso
USA, Wisconsin ftp://xlivecd.mirrors.tds.net/pub/xlivecd/xlivecd-20041201.iso
USA, Georgia ftp://ftp.gtlib.cc.gatech.edu/pub/XLiveCD/xlivecd-20041201.iso
USA, Georgia http://ftp.gtlib.cc.gatech.edu/pub/XLiveCD/xlivecd-20041201.iso
苹果提示:USA, Wisconsin ftp://xlivecd.mirrors.tds.net/pub/xlivecd/xlivecd-20041201.iso
这个下载速度快
Shelley Yen 的cygnuwin : ftp://ftp.tceb.edu.tw/pub/free_software/cygnuwin/
ftp://ftp.tcc.edu.tw/iso/cygwin/cyg+gnu.iso(cygwin 与 gnuwin 的合成版本)
老古开发网:ftp://ic.laogu.com/down/cygwin.rar
http://soft.laogu.com/down/cygwin.rar (均为05年3月版本)

苹果提示:这个站点是高人站点,比较NB,呵呵,喜欢单片机的朋友有福气,超级多 的下载资料等着你,包含*NIX下的东西...

其他的镜像站点:http://cygwin.com/mirrors.html

苹果自己也下载了最新版本的Cygwin,但是偶没有空间,真的需要的话,请哪位好心人提供空间

偶可以上传上去,联系请加偶的QQ:4791821,或者给偶发邮件:Taynni@gmail.com注明一下就可以了.

二:使用

使用上的方便性很是不错,启动Cygwin以后,会在Windows下得到一个Bash Shell,由于Cygwin是以

Windows下的服务运行的,所以很多情况下和在Linux下有很大的不同,这点上,苹果建议你多理解下这个

工作环境。我们开始使用Cygwin吧,比如PS,相当于Windows下的TM(任务管理器),呵呵,直接Ps的话

那么得到的会是Cygwin下的Shell的进程如下
Taynni-417@ENTERBD-417 ~
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
2212 1 2212 2212 con 1003 01:54:29 /usr/bin/bas
3384 2212 3384 3232 con 1003 01:59:24 /usr/bin/ps

如果这个时候你需要在Cygwin下显示Windows下的进程你可以在PS后面加上参数-aW,

PS的相关用法:
Quote
Usage ps [-aefl] [-u uid]
-f = show process uids, ppids
-l = show process uids, ppids, pgids, winpids
-u uid = list processes owned by uid
-a, -e = show processes of all users
-s = show process summary
-W = show windows as well as cygwin processes

很容易看懂吧,呵呵

有点不一样的地方,我想大家一定想知道在Cygwin下怎么访问Windows下的内容了,

呵呵,首先使用DF命令直接查看下本地驱动器,呵呵,很容易了吧,显示的内容

如下:
Quote
Taynni-417@ENTERBD-417 ~
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
e:\cygwin\bin 10231384 4844432 5386952 48% /usr/bin
e:\cygwin\lib 10231384 4844432 5386952 48% /usr/lib
e:\cygwin 10231384 4844432 5386952 48% /
c: 5106676 1240312 3866364 25% /cygdrive/c
d: 10239408 6560328 3679080 65% /cygdrive/d
e: 10231384 4844432 5386952 48% /cygdrive/e
f: 6333252 4065564 2267688 65% /cygdrive/f
g: 7150972 4672724 2478248 66% /cygdrive/g

如上便是我的硬盘的全部了,在后面的/cygdrive/c便是C盘了,然后/cygdrive/d便是D盘了

这样的话,想进D盘便可以这样进,呵呵
Quote
Taynni-417@ENTERBD-417 ~
$ cd /cygdrive/d

Taynni-417@ENTERBD-417 /cygdrive/d
$ ls -l
ls: pagefile.sys: Permission denied
total 0
drwxr-xr-x 9 Taynni-4 None 0 Aug 31 20:56 Book
drwxr-xr-x 2 Taynni-4 None 0 Aug 23 05:24 Ftproot
drwxr-xr-x 30 Taynni-4 None 0 May 10 23:38 HACKER
drwxr-xr-x 11 Taynni-4 None 0 Feb 1 2005 JIAOXUE
drwxr-xr-x 8 Taynni-4 None 0 Jan 3 2005 Local Settings
dr-xr-xr-x 24 Taynni-4 None 0 Oct 16 2004 My Documents
drwxr-xr-x 12 Taynni-4 None 0 May 14 16:48 Mywww
drwxr-xr-x 2 Taynni-4 None 0 Jun 29 2004 Recycled
drwxr-xr-x 3 Taynni-4 None 0 Aug 22 04:44 SECBOOK
drwxr-xr-x 6 Taynni-4 None 0 Feb 28 2005 TaynniCHX
drwxr-xr-x 15 Taynni-4 None 0 Mar 30 01:04 TaynniGZ
drwxr-xr-x 12 Taynni-4 None 0 May 11 01:30 TaynniH
drwxr-xr-x 15 Taynni-4 None 0 Mar 12 04:27 TaynniYM
drwxr-xr-x 6 Taynni-4 None 0 Dec 13 2004 Taynniwww
drwxr-xr-x 8 Taynni-4 None 0 Aug 31 20:55 Word

Taynni-417@ENTERBD-417 /cygdrive/d
$

在Cygwin下还可以运行Windows下的程序,如下:
Taynni-417@ENTERBD-417 ~
$ cmd.exe
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

e:\cygwin\home\Taynni-417>d:

D:\>cd hacker

D:\HACKER>cd tools

D:\HACKER\Tools>cd pstools

D:\HACKER\Tools\Pstools>ls
pdh.dll pskill.exe pspasswd.exe
Psinfo.exe psexec.exe pslist.exe psservice.exe
Pstools.chm psfile.exe psloggedon.exe psshutdown.exe
README.TXT psgetsid.exe psloglist.exe pssuspend.exe

D:\HACKER\Tools\Pstools>exit

Taynni-417@ENTERBD-417 ~
$

很明显的,直接输入CMD.EXE便可以得到一个本机CMDSHELL,这样你想运行什么程序都可以了

退出到Cygwin的Bash shell需要使用exit命令,很方便吧,呵呵

在Cygwin下还可以进行编译程序,比如C和perl,当然,你也可以借助ActivePy,这个东西也很不错

也是一个仿真器,在Windows下模拟perl的解释器.

对于一个系统而言,没有相应的系统工具是不可能的,在Cygwin下拥有的UNIX工具基本上够你使用

了。当然,这需要你安装完整的Cygwin包,我的机子上就安装了完整的,比较大,如果硬盘允许,苹果建

议你完整安装!像grep,cut,sed,strings,strace,md5sum,diff,patch,ssh,xxd,等等工具

你都可以进行安装和使用,如果你真的不知道应该怎么用这些工具,其实苹果很多也不会,只要去接触

你就会了!!!没有不会使用的东西,只有你愿意不愿意去使用而已!说笑了,言归正传,请使用

所要使用的命令 --help获取帮助,如下所示:比如我不知道md5sum做什么用的

(这个命令是用于效验文件md5值的,主要是为了文件的完整性和安全性)
Quote
Taynni-417@ENTERBD-417 ~
$ md5sum --help
Usage: md5sum [OPTION] [FILE]...
or: md5sum [OPTION] --check [FILE]
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.

-b, --binary read files in binary mode (default on DOS/Windows)
-c, --check check MD5 sums against given list
-t, --text read files in text mode (default)

The following two options are useful only when verifying checksums:
--status don't output anything, status code shows success
-w, --warn warn about improperly formated checksum lines

--help display this help and exit
--version output version information and exit

The sums are computed as described in RFC 1321. When checking, the input
should be a former output of this program. The default mode is to print
a line with checksum, a character indicating type (`*' for binary, ` ' for
text), and name for each FILE.

Taynni-417@ENTERBD-417 ~
$

基本使用上应该没有多大的问题了,文章因为我偷懒,也是不知道该怎么写才可以帮助大家

我很苦恼的是,并没有人给我意见,所以先写这么点吧,如果你有问题的话,请加我的qq或者

给我邮件,大家可以讨论,不是么?

下面给出一些关于Cygwin的资料:
1:http://www.isi.edu/nsnam/ns/ns-cygwin.html
2:http://pigtail.net/LRP/printsrv/cygwin-sshd.html
3:http://kde-cygwin.sourceforge.net/
4:http://x.cygwin.com/
5:http://chinyi.ncit.edu.tw/~peterju/cygwin.html
6:http://cygnome.sourceforge.net/
http://xlivecd.indiana.edu/

cygwin,在win中开发linux程序

cygwin,在win中开发linux程序
作者:乾坤一笑 CSDN (2005-04-06 17:17:39)

很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕 linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活;2>linux开发上手太难,写出第一个helloworld不亚于java的难度,环境配置摸不着头脑。对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到 linux开发的社群中来,不会安装linux系统,不会配置工作环境是不能想象的。(事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及linux分区结构和文件系统、环境变量的设置、种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东)。

本文试图跳过这个难走的步骤,启用一个win环境下的linux仿真器(和linux下面的命令行开发环境基本一致),用短短的20分钟的时间,教你做出一个纯正的linux下gcc编译的helloworld。就象是买点心前先尝尝味道,不也是一件很愉快的事情么?(注:cygwin事实上不仅有此模拟功能,它也是移植unix<-->win程序的一个很有效的工具,也有人用它来做嵌入式系统开发)

一、cygwin是什么?
这个问题你最好google一下"cygwin的历史",或许能够获得更为详尽的答案。简而言之,cygwin是一个在windows平台上运行的 linux模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。插一句废话,很多朋友不明白 linux和unix的区别和联系,在此也简要介绍一下。UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统; linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统。为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近。
以下引用网上的一段话(出处:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用于说明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的安装。
cygwin的安装文件很容易通过google找到。目前国内的网站上有"网络安装版"和"本地安装版"两种。标准的发行版应该是 网络安装版。两者并无大不同,下面介绍一下安装的过程。

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

step2. 安装模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三种。"Install form Internet"就是直接从internet上装,适用于网速较快的情况。如果你和我一样网速不是很快,或者说装过之后想把下载的安装文件保存起来,下次不再下载了直接安装,就应该选择"Download form Internet",下载安装的文件(大约40M左右)。
事实上,所谓的"本地安装版",也是别人从网上下载全部文件后打的包(适用于中国国情嘛^_^)

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
:
很全是吧,嘿嘿。

好了,多说无意,让我们

Cygwin的安装

1.1 2.1. Cygwin是可以在Windows下执行的Linux运行环境


本来我是安装了Linux10,但是使用过程中还是需要经常回到windows查看一些文档啊、拷贝一些文件啊,太烦了,所以呢还是决定把Cygwin搞起来,这样在windows下工作就方便多了。

Cygwin的安装有两种方法:

一种是直接在线安装,这是按配置需要下载的,但是下载的东西会很多很大,400M左右,需要的时间比较长。

第二种是先到macraigor下载一个安装包,60多M,下载速度很快。安装选项也简单。然后再执行在线安装,安装Ncurses libraries就可以了。

我开始使用第一种方法,搞了几天,重复了很多次,可老是安装不好,最后还是用第二种方法搞定的。


1.2 2.2. 下载


1.2.1 2.2.1. CYGWIN(2.0.0)

See document: http://www.macraigor.com/full_gnu.htm <http://www.macraigor.com/full_gnu.htm>

60M.下载速度很快,我用ADSL下载速度达到70多K,比一般下载得快多了,不过我是后半夜下载的。:)

1.3 2.3. 安装

从macraigor下载的Cygwin2.0直接安装就可以了,安装过程很简单。但是似乎缺少一个组件Ncurses libraries,在make menuconfig的时候会报错,需要执行在线安装的步骤添加这个组件。


1.4 2.4. 在线安装

1.4.1 2.4.1. 下载setup.exe

See document: www.cygwin.com <outbind://1/www.cygwin.com>

登陆www.cygwin.com,页面上有一个Install Cygwin Now的连接,是一个setup.exe文件,直接打开也可以,推荐下载下来,存到一个目录里,这样可以把文件下载下来,以后安装就方便了。


1.4.2 2.4.2. 安装选项

必须安装的子目录(sub category): (把子目录旁边的"default"用鼠标点一下,直到变成"install")
Archive
Base
Devel:包括gcc、make等编译工具
Libs
Net
DEShells
Utils: 包括bzip2等实用工具

如果是已经从macraigor下载安装了Cygwin,那么选择安装 Devel下的libncurses-devel一项就可以了。

大家可选择较快的下载地址,我是用的mirrors.rcn.net,下载速度在20k左右。


必须通过cygwin提供的setup.exe进行安装,可根据安装提示一步一步进行,提供通过internet安装方式或本地安装方式。建议把cygwin整个安装包下载到本地再进行本地安装比较方便。如果无特殊需求,可简单按它的缺省安装方式安装最少数量的软件包。建议不要安装到c:\下。cygwin的问题和解答可参考cygwin FAQ。


1.5 设置

1.5.1 批处理文件


在自己生成交叉编译器之前,首先对Cygwin进行一些设置。假设Cygwin安装在e目录下,在打开Cygwin窗口之前,进入到E:\Cygwin目录。在这个目录下,有一个文件名为Cygwin.bat的批处理文件,编辑该文件,在第一行后加入set CYGWIN=title ntea,这是因为Cygwin的启动批处理文件需要启动Unix文件系统模拟。修改完毕且保存后退出。


1.5.2 SH链接

运行cygwin,在根目录下输入,cd bin
mv sh.exe sh-original.exe
ln �s bash.exe sh.exe

现在对cygwin的修改搞定

1.6 2.5. 运行

从程序组或者桌面启动Cygwin。

输入:
cd /
ls

能列出目录说明就ok了。

--
由 Pegasus 于 1/14/2008 05:37:00 下午 在 嘻嘻哈哈 上发表

Cygwin使用指南

cygwin是一个在windows平台上运行的unix模拟环境,是cygnus
solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操
作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非
常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。

根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。

1 引言
cygwin
是一个在windows平台上运行的unix模拟环境,是cygnus
solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操
作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非
常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。

2 机理
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-u...

(cygwin.com在电信ADSL似乎被屏蔽了,不知道原因。)
3 安装设置cygwin
3.1 安装
要安装网络版的cygwin,可以到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin。按照每一屏的指示可以方便的进行安装。
3.2 环境变量
开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。这个.bat文件安装在cygwin所在的根目录下。 可以随意编辑该文件。
CYGWIN变量用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN或者在执行bash前用类似下面的格式在dos框下把它设为tty
C:\> set CYGWIN=tty notitle glob

PATH
变量被cygwin应用程序作为搜索可知性文件的路径列表。当一个cygwin进程启动时,该变量被从windows格式(e.g.
C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g.,
/WinNT/system32:/WinNT)。如果想在不运行bash的时候也能够使用cygwin工具集,PATH起码应该包含x:\cygwin
\bin,其中x:\cygwin 是你的系统中的cygwin目录。
HOME变量用来指定主目录,推荐在执行bash前定义该变量。当
cygwin进程启动时,该变量也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:\(dos命令set
HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用echo $HOME看,其值为/cygdrive/c.
TERM变量指定终端型态。如果美对它进行设置,它将自动设为cygwin。
LD_LIBRARY_PATH被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。
3.3 改变cygwin的最大存储容量
Cygwin
程序缺省可以分配的内存不超过384
MB(program+data)。多数情况下不需要修改这个限制。然而,如果需要更多实际或虚拟内存,应该修改注册表的
HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mb并把它的值设为
需要的内存限制,单位是十进制MB。也可以用cygwin中的regtool完成该设置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin

4 使用cygwin
这一段讲一下cygwin和传统unix系统的不同之处。
4.1 映射路径名
4.1.1 引言
cygwin
同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法,
使用这种方法用户可以不关心存储设备的物理位置,方便了用户使用。在Windows操作系统,Novell
Netware和其它操作系统中,都已经使用了这种规范以取代本地命名系统。在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所
在服务器在什么地方。我们只要以下面格式就可以访问文件:
\服务器名\共享名\路径\文件名
共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必关心这些卷或存储设备所在的物理位置。)
符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,其中之一为根,另一个可能是在/disk2路径下。

为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护了一个针对win32文件系统的内部posix视图,使这些
程序可以在windows下正确运行。在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
4.1.2 cygwin mount表
cygwin
中的mount程序用来把win32盘符和网络共享路径映射到cygwin的内部posix目录树。这是与典型unix
mount程序相似的概念。对于那些对unix不熟悉而具有windows背景的的人来说,mount程序和早期的dos命令join非常相似,就是把一
个盘符作为其他路径的子目录。
路径映射信息存放在当前用户的cygwin mount表中,这个mount table
又在windows的注册表中。这样,当该用户下一次登录进来时,这些信息又从注册表中取出。mount
表分为两种,除了每个用户特定的表,还有系统范围的mount表,每个cygwin用户的安装表都继承自系统表。系统表只能由拥有合适权限的用户
(windows nt的管理员)修改。
当前用户的mount表可以在注册表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系统表
存在HKEY_LOCAL_MACHINE下。
posix
根路径/缺省指向系统分区,但是可以使用mount命令重新指向到windows文件系统中的任何路径。cygwin从win32路径生成posix路径
时,总是使用mount表中最长的前缀。例如如果c:被同时安装在/c和/,cygwin将把C:/foo/bar转换成/c/foo/bar.
如果不加任何参数地调用mount命令,会把Cygwin当前安装点集合全部列出。在下面的例子中,c盘是POSIX根,而d盘被映射到/d。本例中,根是一个系统范围的安装点,它对所有用户都是可见的,而/d仅对当前用户可见。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
还可以使用mount命令增加新的安装点,用umount删除安装点。
当Cygwin
不能根据已有的安装点把某个win32路径转化为posix路径时,cygwin会自动把它转化到一个处于缺省posix路径/cygdrive下的的一
个安装点. 例如,如果Cygwin 访问Z:\foo,而Z盘当前不在安装表内,那么Z:\将被自动转化成/cygdrive/Z.
可以给每个安装点赋予特殊的属性。自动安装的分区显示为"auto"安装。安装点还可以选择是"textmode"还是 "binmode",这个属性决定了文本文件和二进制文件是否按同样的方式处理。
4.1.3 其他路径相关信息
cygpath工具提供了在shell脚本中进行win32-posix路径格式转换的能力。
HOME, PATH,和LD_LIBRARY_PATH环境变量会在cygwin进程启动时自动被从Win32格式转换成了POSIX格式(例如,如果存在从该win32路径到posix路径的安装,会把c:\cygwin\bin转为/bin)。

Cygwin介绍

Cygwin是一个用于在Windows上模拟Linux环境的软件。它可以作为那些虚拟机软件的一个部分替代品。之所以将它排在第一个来介绍,是因为它实在给我帮了很大的忙。

运行Cygwin后,你会得到一个类似Linux的Shell环境,在其中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。我使用的最频繁的是Gcc和Make。我经常用它们来编译一些我从网上下载的开源的工程。这些工程在Windows上编译往往很麻烦。我也用它做过X Server来连接一台真正的Linux服务器,用来测试一个用tcl/tk编写的跨平台的用户界面程序。下面,我逐步介绍Cygwin的基本用法。
使用

安装完成后,在桌面上会有一个Cygwin的图标,双击它,会出现一个windows的命令窗口,过一会,你就会见到熟悉(或者陌生)的 Linux的Shell界面。试一试ls ,是不是可以工作了?

从今往后,你就可以自由的在windows下使用Linux的软件了。基本上你能用到,cygwin都有。如果你要开发可以在两个平台上运行的程序, cygwin也是你前期试验的好地方。从互联网上下载的各种开源代码,也可以在Cygwin里编译,运行,调试。下面介绍一些使用技巧,更多地还要靠大家自己探索拉!

使用Cygwin访问windows的文件
Cygwin安装后,其根目录位于你的安装目录下。所以使用cd /,只能访问到你的安装目录,要访问硬盘上的其他文件,可以使用mount:
mount D:/testdir ~/testdir
这样,你就可以在~/testdir里访问到D:/testdir里的内容了。

使用Cygwin作为X Server
现在的Linux服务器一般都提供X,要从Windows上使用Linux的X,需要在Windows上运行一个X Server。有一些专门为windows开发的软件可以做这个,但是Cygwin自带的X server就可以胜任。下面举例说明如何使用:
首先你必须安装X11包,然后运行Cygwin shell,输入x&。这时候你的桌面上出出现一个布满斜纹大窗口,这就是我们的X server了,回头Linux机器上的X 程序就会显示在这里:

MinGW简介,安装,配置,调试说明

MinGW简介,安装,配置,调试说明
标签: MinGW MinGW-4.1.1.exe Visual-MinGW 0.53 mingw32-make-3.80.0-3.exe

MinGW简介,安装,配置,调试说明

MinGW - Minimalist GNU for Windows
MinGW - Windows平台下GNU工具的最小子集
MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs.
MinGW:可以免费获得和发布的Windows头文件和导入库文件,以及可以用来产生不依赖于任何第三方C运行时的GNU工具集。

mingw是windows版本的gnu c/c++工具集 主要包括编译器gcc,连接器make,调试器gdb

MinGW 官方网站为 http://www.mingw.org

可参考最新版本,为如下地址:
http://sourceforge.net/projects/mingw/

安装软件:
1,MinGW-4.1.1.exe,通过网络安装,将所有的东西都装在C:\MinGW(默认目录)
下载地址:http://prdownloads.sourceforge.net/mingw/MinGW-4.1.1.exe?download

2,Visual-MinGW 0.53,安装完毕后,Visual-MinGW会提示让你寻找compile目录,这时候选mingw安装目录(默认是C:\MinGW)即可
下载地址:http://prdownloads.sourceforge.net/visual-mingw/vm-0.53a-20031011.exe?download
3,mingw32-make-3.80.0-3.exe
下载地址:http://prdownloads.sourceforge.net/mingw/mingw32-make-3.80.0-3.exe?download

4,配置环境变量,复制"mingw32-make.exe"增加"make.exe"

5,打开Visual-MinGW,想写点啥就写点啥吧,finish

by Longman 2007.05.10 11:11

提示:
(1)MinGW-4.1.1.exe安装时(这里只是安装"current",不安装"source")下载以下几个包:
ada.tar.gz
binutils.tar.gz
g++.tar.gz
g77.tar.gz
gcc.tar.gz
java.tar.gz
runtime.tar.gz
w32api.tar.gz
objc.tar.gz
mingw32-make.tar.gz

如果你水平可以,完全可以单独下几个自己需要的包配置一下,而不需要安装

在(1)里如上配置为参考网上仁兄的,你也可以默认安装,me too :(

(2)配置环境变量:
PATH C:\MinGW\bin; (千万别直接覆盖PATH变量,务必将其放在最前面,要用分号隔开)
LIBRARY_PATH C:\MinGW\lib
C_INCLUDEDE_PATH C:\MinGW\include
CPLUS_INCLUDE_PATH C: \MinGW\include\c++\3.4.2;C:\MinGW\include\c++\3.4.2\mingw32;C:\MinGW\include \c++\3.4.2\backward;C:\MinGW\include (不同版本的c++版本不同,不要盲目照转,如安装不同的MinGW版本,清注意配置)

(3)将C:\MinGW\bin下的文件"mingw32-make.exe"复制一份并改名为"make.exe",方便以后操作。

测试:

(1)在cmd中执行下make命令(如c:\MinGW\bin>make.exe),如果出现"***No targets specfied and no make file found stop",设置成功。
(2)在cmd中输入"gcc -v",如果屏幕出现"gcc不是内部命令或外部命令,也不是可运行的程序或批处理文件。"表示环境变量设定有问题。如果出现如下显示,表示设定成功。
Reading specs from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)

(3)在cmd中输入"mingw32-make -version",如果屏幕出现:
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
如上显示,恭喜你,MinGW安装成功了