ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

UNIX环境高级编程 - UNIX标准及实现

2021-11-04 19:34:21  阅读:196  来源: 互联网

标签:头文件 常量 编程 高级 UNIX ISO 限制 name


在过去的近25年时间,人们为了UNIX的标准化做出了种种努力,这使得程序在不同版本的UNIX系统之间的移植相当容易。

UNIX标准化

ISO C

1989年,C语言首个标准得到批准,即C89。次年,一个带有小改动的版本标准被批准其为C90。因此,C89和C90通常指同一种语言。

在2000年三月,ANSI采纳了ISO/IEC 9899:1999标准,即C99。

在2011年12月,ANSI采纳了ISO/IEC 9899:2011标准,即C11,它是C程序语言的现行标准。

按照ISO C标准定义的头文件将C语言公用函数库划分成了24个部分。POSIX.1标准包括这些头文件以及一些额外的头文件。

image-20211104185027322

IEEE POSIX

POSIX是由IEEE制订的一系列标准,其指的是可移植操作系统接口,它说明的是接口而不是实现。

POSIX.1标准包括ISO C标准库汗水(上图)以及一些额外的头文件(下图)。

image-20211104185129355

Single UNIX Specification

Single UNIX Specification(SUS,单一UNIX规范),它是POSIX.1标准的一个超集,他定义了一些附加接口扩展POSIX.1规范提供的功能。

UNIX系统实现

ISO C、IEEE POSIX、Single UNIX Specification是三个不同的组织,第一个组织负责对C语言进行标准化,后两个组织负责对UNIX系统接口进行标准化。

这三个组织制定了概念上的规范,但实现是由厂商进行的。几个知名实现发行版如下:

  • SVR4:AT&T实现
  • BSD:UCB实现
  • FreeBSD:开源(基于4.4BSD-Lite)
  • Linux:Linus在1991年从Minix改写而来,开源
  • Mac OS X:Apple,又称Darwin系统
  • Solaris:SUN,基于SVR4

限制

UNIX 系统实现定义了很多幻数和常量。有两种类型的限制是必须的:

  • 编译时限制,如 short int 最大值是多少
    • 通常编译时限制可以在头文件中定义;运行时限制则要求进程调用一个函数获得限制值。
  • 运行时限制,如文件名最长多少个字符

某些限制在一个给定的 UNIX 实现中可能是固定的(由头文件定义),在另一个 UNIX 实现中可能是动态的(需要由进程调用一个函数获得限制值)。如文件名的最大字符数在不同的操作系统中,是属于动态/静态限制。因此提供了三种限制:

  • 编译时限制(由头文件给定)
  • 与文件或者目录无关的运行时限制(由 sysconf函数给定)
  • 与文件或者目录相关的运行时限制(由 pathconf函数以及fpathconf函数给定)

ISO C 限制

ISO C 所有编译时限制都在头文件 <limits.h> 中,如整型大小。

  • 这些限制常量在一个给定的操作系统中不会改变
  • 关于浮点数的最大最小值的编译时限制,在<float.h>头文件中定义
  • <stdio.h> 头文件还定义了三个编译时限制:
    • FOPEN_MAX:可同时打开的标准I/O 流限制的最小数
    • TMP_MAX:由tmpnam函数产生的唯一文件名的最大个数
    • FILENAME_MAX:虽然 ISO C 定义了该常量,但是要避免使用。而要用 POSIX 提供的 NAME_MAXPATH_MAX 常量

image-20211104190746675

POSIX 限制

POSIX定义了很多涉及操作系统实现限制的常量。这些常量大多数在<limits.h>中,也有的按照具体条件定义在其他头文件中。

获取运行时限制

#include<unistd.h>

long sysconf(int name); 
long pathconf(const char*pathname,int name);
long fpathconf(int fd,int name); 
// 若成功,返回相应值;若出错,返回-1

参数:

  • name:指定的限制值。name参数是系统定义的常量
    • _SC_开头的常量用于 sysconf函数
    • -PC_开头的常量用于pathconffpathconf函数
  • pathname:文件名
  • fd:打开文件的文件描述符

失败的情况:

  • name参数并不是一个合适的常量,则这三个函数返回-1,并将 errno设置为 EINVAL
  • 有些name会返回一个不确定的值,这通过返回 -1 来体现,同时不改变errno

img

img

标签:头文件,常量,编程,高级,UNIX,ISO,限制,name
来源: https://www.cnblogs.com/cxl-/p/15509810.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有