UNIX环境高级编程 - UNIX标准及实现
2021/11/4 22:16:03
本文主要是介绍UNIX环境高级编程 - UNIX标准及实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在过去的近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标准包括这些头文件以及一些额外的头文件。
IEEE POSIX
POSIX是由IEEE制订的一系列标准,其指的是可移植操作系统接口,它说明的是接口而不是实现。
POSIX.1标准包括ISO C标准库汗水(上图)以及一些额外的头文件(下图)。
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_MAX
和PATH_MAX
常量
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_
开头的常量用于pathconf
和fpathconf
函数
- 以
pathname
:文件名fd
:打开文件的文件描述符
失败的情况:
- 若
name
参数并不是一个合适的常量,则这三个函数返回-1,并将errno
设置为EINVAL
- 有些
name
会返回一个不确定的值,这通过返回 -1 来体现,同时不改变errno
这篇关于UNIX环境高级编程 - UNIX标准及实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-082024年常用的情绪识别API
- 2025-01-07如何利用看板工具优化品牌内容创作与审批,确保按时发布?
- 2025-01-07百万架构师第十一课:源码分析:Spring 源码分析:Spring源码分析前篇|JavaGuide
- 2025-01-07质量检测标准严苛,这 6 款办公软件达标了吗?
- 2025-01-07提升品牌活动管理的效率:看板工具助力品牌活动日历的可视化管理
- 2025-01-07宠物商场的精准营销秘籍:揭秘看板软件的力量
- 2025-01-07“30了,资深骑手” | 程序员能有什么好出路?
- 2025-01-07宠物公园的营销秘籍:看板软件如何帮你精准触达目标客户?
- 2025-01-07从任务分解到资源优化:甘特图工具全解析
- 2025-01-07企业升级必备指南:从传统办公软件到SaaS工具的转型攻略