跨平台开发--标准


操作系统标准
POSIX.1-2008 又叫做 IEEE Std 1003.1?-2008,也叫做ISO/IEC 9945

http://www.lindevdoc.org/wiki/POSIX

Version/part of the spec IEEE Number Date of Publication Contents
POSIX.1 1003.1-1988 1988 Process management, signals, file and directory operations, timers, pipes + the standard ANSI C library
POSIX.1 edition 1990 1003.1-1990 1990 Approved by ISO as ISO/IEC 9945-1:1990
Amendment 1b (Real-Time Extensions) 1003.1b-1993 1993 Priority scheduling, real-time signals, clocks and timers, semaphores, message passing, shared memory, memory locking, asynchronous and synchronous I/O
Amendment 1c (Thread Extensions) 1003.1c-1995 1995 POSIX threads API
POSIX edition 1996 1003.1-1996 1996 Approved by ISO as ISO/IEC 9945-1:1996; incorporates amendments 1b, 1c
POSIX Real-Time Profile 1003.13-1998 1998  
Amendment 1d (Additional Realtime Extensions) 1003.1d-1999 1999  
POSIX.2 (Shell & Tools, User Portability Extensions) 1003.2-1999, 1003.2a-1999 1999  
Amendment 1g (Protocol Independent Interfaces) 1003.1g-2000 2000  
Amendment 1j (Advanced Realtime Extensions) 1003.1j-2000 2000  
Amendment 1q (Tracing) 1003.1q-2000 2000  
POSIX.26 (Device Control APIs) 1003.26-2000 2000  
POSIX.1 edition 2001 (also known as SUSv3) 1003.1-2001 2001 Incorporates amendments 1a, 1d, 1g, 1j, 1q. Merges POSIX.2 into the core standard. Includes the ISO C99 library.
POSIX.1 Technical Corrigendum 1 (System Interface) 1003.1-2002 2002 Full text is available
POSIX.1 Technical Corrigendum 2 (System Interface) 1003.1-2003 2003 Approved by ISO as ISO/IEC 9945:2003/Cor 1:2004. Full text is available.
POSIX.1 edition 2004 (also POSIX:2004) 1003.1-2004 2004 Incorporates corrigenda 1 and 2. Full text is available.
POSIX.1-2008 (also POSIX:2008, also known as SUSv4) 1003.1-2008 2008 Full text is available.
 


语言标准
标准c: standard c, ansi c, iso c

标准c++: statndard c++, C++11,也称为C++0x, ISO/IEC 14882:2011

c++ stl: c++标准模版库



编译器支持标准模板库版本:
gcc-----SGI STL
vc++----micro stl


操作系统支持:
unix/linux遵守posix.1标准, c/c++ std

winwodw遵守c/c++ std


POSIX.1 and ISO C标准头文件

http://hi.baidu.com/419836321/item/5af2110d5338e43cf3eafcde

http://www.cnitblog.com/guopingleee/archive/2007/08/13/31701.html

ISO C标准定义的头文件(24项)
<assert.h>       ----------------------   验证程序断言
<complex.h>    ----------------------   支持复数算术运算
<ctype.h>        ----------------------   字符类型
<errno.h>        ----------------------   出错码
<fenv.h>          ----------------------   浮点环境
<float.h>          ----------------------   浮点常量
<inttypes.h>    ----------------------   整型格式转换
<iso646.h>      ----------------------   替代关系操作符宏
<limits.h>         ----------------------   实现常量
<locale.h>       ----------------------   局部类别
<math.h>         ----------------------   数学常量
<setjmp.h>      ----------------------   非局部goto
<signal.h>       ----------------------   信号
<stdarg.h>      ----------------------   可变参数表
<stdbool.h>     ----------------------   布尔类型和值
<stddef.h>       ----------------------   标准定义
<stdint.h>        ----------------------   整型
<stdio.h>         ----------------------   标准I/O库
<stdlib.h>        ----------------------   实用程序库函数
<string.h>       ----------------------   字符串操作
<tgmath.h>     ----------------------   通用类型数学宏
<time.h>         ----------------------   时间和日期
<wchar.h>      ----------------------   扩展的多字节和宽字符支持
<wctype.h>     ----------------------   宽字符分类和映射支持
 
POSIX标准定义的必须的头文件(26项)
<dirent.h>      ----------------------   目录项
<fcntl.h>         ----------------------   文件控制
<fnmatch.h>   ----------------------   文件名匹配类型
<glob.h>         ----------------------   路径名模式匹配类型
<grp.h>          ----------------------   组文件
<netdb.h>      ----------------------   网络数据库操作
<pwd.h>         ----------------------   口令文件
<regex.h>      ----------------------   正则表达式
<tar.h>           ----------------------   tar归档值
<termios.h>    ----------------------   终端I/O
<unistd.h>      ----------------------   符号常量
<utime.h>       ----------------------   文件时间
<wordexp.h>   ----------------------   字扩展类型
<arpa/inet.h>  ----------------------   Internet定义
<net/if..h>       ----------------------   套接字本地接口
<netinet/in.h> ----------------------   Internet地址族
<netinet/tcp.h>----------------------   传输控制协议定义
<sys/mman.h>----------------------   内存管理声明
<sys/select.h>----------------------   select函数
<sys/socket.h>----------------------   套接字接口
<sys/stat.h>    ----------------------   文件状态
<sys/times.h>  ----------------------   进程时间
<sys/types.h>  ----------------------   基本系统数据类型
<sys/un.h>      ----------------------   UNIX域套接字定义
<sys/utsname.h>----------------------系统名
<sys/wait.h>    ----------------------   进程控制


/////////////////////////////////////////////////////////////

crt

////////////////////////////////////////////////////////////

http://www.codeproject.com/KB/cpp/api_crt_cpp_lib_et_al.aspx?display=Mobile

http://www.cnblogs.com/Leo_wl/archive/2011/06/09/2075988.html

 

跨平台开发--标准_第1张图片

 

 

 

windows先开发了crt, 然后在crt的基础上开发了windows api, 然后又在windows api的基础上开发了一些系统相关的crt,如文件和目录,mkdir, 如线程。

跨平台开发--标准_第2张图片

 

基于windows api基础之上的crt,是微软参考unix的posix标准写的,前面加下划线前缀。

 例子:CreateDirectory是系统函数,windows api, _mkdir是微软根据posix标准,基于CreateDirectory实现的库函数

 

http://msdn.microsoft.com/en-us/library/60k1461a(v=vs.80).aspx

vc++ 用到的库: runtime library+standard c/c++ 

微软一开始用的platform sdk, 后来推出windows sdk.

platform sdk 是开发windows的sdk,包含库和头文件,而crt是它用到的其中的一个库。

类似iphone开发,苹果开放的sdk, 里面又会用到别的库。

 

iso c标准是为了c语言的可移植性,是语言标准。

posix标准是为了各种unix系统之间的可移植性, 是系统标准。

posix标准包含iso c.

 

windows有自己的一套标准,当然它也包含iso c.它也很大程度上都参考posix标准。有一些函数如mkdir就是posix标准包含的,但是windows下用_mkdir.

以上这些api都是在windows的crt中。_mkdir内部其实也是调用了windows的makedirectory的系统调用。

综上,为了开发可移植的应用,尽量用crt的api.

 

#include <stdio.h>  /* defines FILENAME_MAX */ 
#ifdef WINDOWS 
   
#include <direct.h> 
   
#define GetCurrentDir _getcwd 
#else 
   
#include <unistd.h> 
   
#define GetCurrentDir getcwd 
 
#endif 
 
 
char cCurrentPath[FILENAME_MAX]; 
 
 
if (!GetCurrentDir(cCurrentPath,sizeof(cCurrentPath)/sizeof(TCHAR))) 
     
{ 
     
return errno; 
     
} 
 
cCurrentPath
[sizeof(cCurrentPath)-1]='\0';/* not really required */ 
 
printf
("The current working directory is %s", cCurrentPath); 

 

 

 

 

Before Visual C++ 4.2

c runtime library(LIBC.LIB, LIBCMT.LIB, and MSVCRT.LIB)=old iostream library(LIBCI.LIB, LIBCIMT.LIB, MSVCIRT.LIB)+other

after visual c++4.2

c runtime library(LIBC.LIB, LIBCMT.LIB, and MSVCRT.LIB)=stl(LIBCP.LIB, LIBCPMT.LIB, MSVCPRT.LIB)+other,

old iostream func removed from (LIBC.LIB, LIBCMT.LIB, and MSVCRT.LIB).


iosteam header with .h, use old iostream lib, else use stl.


When you build a release version of your project, one of the basic C run-time libraries (LIBC.LIB, LIBCMT.LIB, and MSVCRT.LIB) is linked by default, depending on the compiler option you choose (single-threaded, multithreaded, or DLL). If you include a Standard C++ Library header in your code, a Standard C++ Library will be linked in automatically by Visual C++ at compile time



http://www.tenouk.com/ModuleA.html


你可能感兴趣的:(c,windows,api,library,iostream,compiler)