C++的可移植性和跨平台开发5-操作系统_第1页
C++的可移植性和跨平台开发5-操作系统_第2页
C++的可移植性和跨平台开发5-操作系统_第3页
C++的可移植性和跨平台开发5-操作系统_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++的可移植性和跨平台开发5:操作系统★文件系统(FileSystem以下简称FS)

刚开头搞跨平台开发的新手,多半都会碰上和FS相关的问题。所以先来聊一下FS。归纳下来,开发中简单碰上的FS差异主要有如下几个:名目分隔符的差异;大小写敏感的差异;路径中禁用字符的差异。

为了应对上述差异,你要留意如下几点:

1、文件和名目命名要标准

在给文件和名目命名时,尽量只使用字母和数字。不要在同一个名目下放两个名称相像(名称中只有大小写不同,例如foo.cpp与Foo.cpp)的文件。不要使用某些OS的保存字(例如aux、con、nul、prn)作文件名或名目名。

补充一下,刚刚说的命名,包括了源代码文件、二进制文件和运行时创立的其它文件。

2、#include语句要标准

当你写#include语句时,要留意使用正斜线“/“(比拟通用)而不要使用反斜线“\“(仅在Windows可用)。#include语句中的文件和名目名要和实际名称保持大小写完全全都。

3、代码中涉及FS操作,尽量使用现成的库

已经有许多成熟的、用于FS的第三方库(比方boost::filesystem)。假如你的代码涉及到FS的操作(比方名目遍历),尽量使用这些第三方库,可以帮你省不少事情。

★文本文件的回车CR/换行LF

由于几个知名的操作系统对回车/换行的处理不全都,导致了这个烦人的问题。目前的局面是:Windows同时使用CR和LF;Linux和大局部的Unix使用LF;苹果的Mac系列使用CR。

对于源代码治理,好在许多版本治理软件(比方CVS、SVN)都会智能地处理这个问题,让你从代码库取回本地的源码能适应本地的格式。

假如你的程序需要在运行时处理文本文件,要留意本文方式翻开和二进制方式翻开的区分。另外,假如涉及跨不同系统传输文本文件,要考虑进展适当的处理。

★文件搜寻路径(包括搜寻可执行文件和动态库)

在Windows下,假如要执行文件或者加载动态库,一般会搜寻当前名目;而Posix系统则不尽然。所以假如你的应用涉及到启动进程或加载动态库,就要当心这个差异。

★环境变量

对于上述提到的搜寻路径问题,有些同学想通过修改PATH和LD_LIBRARY_PATH来引入当前路径。假设使用这种方法,建议你只修改良程级的环境变量,不要修改系统级的环境变量(修改系统级有可能影响到同机的其它软件,产生副作用)。

★动态库

假如你的应用程序使用动态库,剧烈建议动态库导出标准C风格的函数(尽量不要导出类)。假如在Posix系统中加载动态库,切记慎用RTLD_GLOBAL标志位。这个标志位会Enable全局符号表,有可能会导致多个动态库之间的符号名冲突(一旦遇到这种事,会消失匪夷所思的运行时错误,极难调试)。

★效劳/看管进程

假如你不清晰效劳和看管进程的概念,请看维基百科(这里和这里)。为了表达便利,以下统称效劳。

由于C++开发的模块大局部是后台模块,常常会遇到效劳的问题。编写效劳需要调用好几个系统相关的API,导致了与操作系统的严密耦合,很难用一套代码搞定。因此比拟好的方法是抽象出一个通用的效劳外壳,然后把业务规律代码作为动态库挂载到它下面。这样的话,至少保证了业务规律的代码只需要一套;效劳外壳的代码虽然需要两套(一个用于Windows、一个用于Posix),但他们是业务无关的,可以很便利地重用。

★默认栈大小

不同的操作系统,栈的默认大小差异很大,从几十KB(据说Symbian只有12K,真抠门)到几MB不等。因此你事先要打听一下目标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论