a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 112|回复: 1

[综合辅导] Linux考试辅导:linux系统下的文件关联

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
我们知道在Windows 下,双击一个可执行文件,文件管理器会自动运行这个应用程序。而双击一个数据文件时,文件管理器会用与之关联的应用程序打开它。数据文件与应用程序之间的关联是通过注册表来实现的:文件管理器查询注册表,找到数据文件对应的应用程序,然后运行这个应用程序,并把数据文件的文件名作为命令行参数传给它。- y. u  T+ V0 `1 M  [
    ! K. t$ K) N: z8 V4 |/ W  A
    这种文件关联的方式非常好用,省去了先起动应用程序再打开文件的麻烦。Linux下的桌面环境也有类似的功能,而且实现方式更合理。最近负责开发一个资源管理器,本来GNOME有一个功能强大的资源管理器Nautilus,只是它过于庞大,不但有超过 10万行的代码,还依赖于libgnome、gnome-vfs和CORBA等,故不适合于嵌入式应用。最终我们决定自己开发一个简化的资源管理器,但又要尽量兼容现有的应用程序,这要了解相关标准,文件关联方式是其中之一。把这几天学到的知识做个笔记吧,供有兴趣的朋友参考:     首先让我们看看文件关联要做些什么。
# V& S- O0 w# P  U# v    1.数据文件与应用程序的关联。一个应用程序通常只能打开一些特定的数据文件,比如图片浏览工具可以打开PNG、BMP和JPEG等图片文件。打开一词的意义比较宽泛,这里包括:打开、播放、安装、编辑和打印等等。4 M3 M: q6 h3 p' i
    2.文件类型信息。资源管理器把数据文件列出来时,通常会用一个图标来标识这类文件,同时也会加上一个简短的名称,以便用户可以很容易把它与其它类型的文件区分开来。/ ~. l1 E& k, |4 S: T1 I/ F
    下面我们看看linux下是如何实现的。
( W  `. i# P# I# |" D8 r    1.判断文件类型。文件的数量是无限的,我们只能按文件类型来处理。如何判断一个文件所属的文件类型呢?可能有人会说,很简单,用扩展名区分就行了。没错,用扩展名可以做到,但这种方法有两个缺陷:一方面它不是很精确,相同扩展名的文件的类型可能完全不同,比如dat文件,可能是一个视频文件,也可能是一个普通数据文件。另一方面它不是很准确,扩展名可以任何改动,为了某种目的,完全可以把exe扩展名改为htm扩展名。" B8 S" B" I8 a) q
    而且在Linux下扩展名只是一个可选项,很多文件根本没有扩展名,所以纯粹采用文件扩展名的方式来判断肯定是不行的。为了更好的判断文件类型,在 linux下同时采用两种方式:优先采用magic方式,其次才采用文件扩展名方式。所谓magic方式,就是根据文件内容来判断。绝大多数文件,内部都有一些特定的标记,这些标记称为magic,比如BMP图片文件以BM两个字符开头,BM就是一个magic。虽然即使采用了双保险机制也有误判的可能,但概率已经大大降低了。! ?. q5 U" h5 R; a0 ^4 t) m6 }
    2.文件类型的表示。
0 O, C" L. }2 p5 y5 c$ n' C4 [( @  s    文件类型如何表示呢?我们说JPEG 是图片文件,说txt是文本文件,WML是XML文件。这种分类很直观,但也有几个问题:对JPEG文件来说,称它图片文件太笼统了。有的图片浏览工具虽然能够打开大部分图片文件,但不一定能打开所有图片文件,它需要更详细的文件类型信息。对txt和WML来说,它们其实都是文本文件,有的编辑器可能以同样的方式处理它们。为了避免分类太细或者太粗,linux采用了MIME(可以参考相关RFC)规范,它用一种层次型的方式来分类,如:- ?$ e/ y$ j- U6 v& b! x
    JPEG文件:image/jpeg
0 E  ^& B$ G2 x' T# j% L( t6 u    文本文件:text/plain
. ]6 [1 c+ @) ]( W. \    XML文件:text/xml
! a0 _" R7 e$ l* h7 T. Y4 x    这种分类方式就可以粗细兼顾了。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:07:08 | 显示全部楼层

Linux考试辅导:linux系统下的文件关联

3.文件类型的数据信息。</p>    在linux下,关于文件类型的信息通常放在/usr/share/mime、/usr/local/share/mime和用户目录下,所有应用程序可以共享这些信息。在该目录下,一般会有以下这些文件:
) _5 R4 H3 {, [5 J    aliases:文件类型的别名。比如application/pdf 有时也称为application/x-pdf 。. W7 I; L2 g3 l5 ^. a
    magic:各种文件的内部标识,用于从文件内容来判断文件类型。如BMP图片文件以BM开头。
1 c# e/ u+ `7 I/ {    globs:扩展名与文件类型的对应关系。如*.cpp文件是text/x-c++src类型的。9 h# I  [3 ~7 g8 |7 H: ^8 m) C' I
    packages目录:用于安装新文件类型用。
2 O, J: @7 h- {! }: h/ f* `9 x    其它子目录及其下的文件:更详细的描述各种文件类型。比如image下的jpeg.xml文件描述了jpeg文件类型。为了方便国际化,这些描述信息有各种语言版本。
) U$ d; I* \& m& d    4.图标文件与数据文件的关联。$ D) G: m9 s1 \! }8 e
    在资源管理器中,通常用不同的图标来区分不同的文件类型。同时图标也是桌面主题相关的,主题不同,图标的大小和外观也不一样。图标文件通常存放在/usr/share/icons/主题/大小/mimetypes目录下。7 B' e5 A' ^# T; Z$ q/ \! D- C
    文件类型与图标文件的对应关系是通过文件名来实现的。比如,JPEG文件对应的图标文件为gnome-mime-image-jpeg.png。
8 Q7 z4 `' |. z6 u0 o% o9 J  Y( _    (这块不是很确定,有待进一步研究)
5 N8 {3 J9 H" `# t, f, N0 T    5.应用程序与数据文件的关联。9 I2 U  {* N, B1 [# y
    应用程序与数据文件的关联是通过.desktop文件来实现的。应用程序要出现在开始菜单中或者桌面上,它要提供一个desktop文件才行。应用程序安装之后,desktop文件通常安装到/usr/share/applications下。( b0 G( R+ R$ S; a
    可以在desktop文件中,指明其可以操作的文件类型。如,软件包安装程序可以操作rpm文件,它的desktop文件(system-install-packages.desktop)内容为:
3 w% d1 w" I6 k    [Desktop Entry]
" ^( u' F1 S# E& X) t    Name=Install Packages
6 l0 G# Z& t. C3 `' r    GenericName=Install Packages
6 e1 f8 M' x# l: A5 ]; o    Comment=Install new packages on the system
  d* @! m& N2 v# }) O1 H    MimeType=application/x-rpm;! H% P' N* g7 {- R3 J! k1 b0 c, U% i
    Exec=/usr/bin/system-install-packages %F
0 n# \" V- j- P! h    Terminal=false
( k$ i  p4 a6 c, F: h* D8 w. Z! H6 |* C    Type=Application1 V6 V0 i( d( P# E! Y8 F
    Icon=system-config-packages.png& N# |- f% X; e
    Encoding=UTF-80 g% Q+ }8 E6 P5 t# `( U0 V
    NoDisplay=true4 C% J6 g( E( c: b( q4 v' X
    MimeType项指明它可以操作rpm类型的文件。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-17 20:58 , Processed in 0.458746 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表