UNIX标准及实现

UNIX标准及实现

UNIX标准化

  1. ISO C标准定义的头文件
	<assert.h>
	<complex.h>
	<ctype.h>
	<errno.h>
	<fenv.h>
	<float.h>
	<intypes.h>
	<iso646.h>
	<limits.h>
	<locale.h>
	<math.h>
	<setjmp.h>
	<signal.h>
	<stdarg.h>
	<stdbool.h>
	<stddef.h>
	<stdint.h>
	<stdio.h>
	<stdlib.h>
	<string.h>
	<tgmath.h>
	<time.h>
	<wchar.h>
	<wctype.h>
  1. POSIX标准定义的头文件
	ISO C标准定义的头文件
	<aio.h>
	<cpio.h>
	<dirent.h>
	<dlfcn.h>
	<fcntl.h>
	<fnmatch.h>
	<glob.h>
	<grp.h>
	<iconv.h>
	<langinfo.h>
	<monetary.h>
	<netdb.h>
	<nl_types.h>
	<poll.h>
	<pthread.h>
	<pwd.h>
	<regex.h>
	<sched.h>
	<semaphore.h>
	<strings.h>
	<tar.h>
	<termios.h>
	<unistd.h>
	<wordexp.h>
	
	
	<arpa/inet.h>
	<net/if.h>
	<netinet/in.h>
	<netinet/tcp.h>
	
	<sys/mman.h>
	<sys/select.h>
	<sys/socket.h>
	<sys/stat.h>
	<sys/statvfs.h>
	<sys/times.h>
	<sys/types.h>
	<sys/un.h>
	<sys/utsname.h>
	<sys/wait.h>
	
	
	// 可选部分
	<fmtmsg.h>
	<ftw.h>
	<libgen.h>
	<ndbm.h>
	<search.h>
	<syslog.h>
	<utmpx.h>
	
	<sys/ipc.h>
	<sys/msg.h>
	<sys/resource.h>
	<sys/sem.h>
	<sys/shm.h>
	<sys/time.h>
	<sys/uio.h>
	
	<mqueue.h>
	<spawn.h>
	
	
	选项码			符号常量
	ADV				_POSIX_ADVISORY_INFO
	CPT				_POSIX_CPUTIME
	FSC				_POSIX_FSYNC
	IP6				_POSIX_IPV6
	ML				_POSIX_MEMLOCK
	MLR				_POSIX_MEMLOCK_RANGE
	MON				_POSIX_MONOTONIC_CLOCK
	MSG				_POSIX_MESSAGE_PASSING
	MX				__STDC_IEC_559__
	PIO				_POSIX_PRIORITIZED_IO
	PS				_POSIX_PRIORITIZED_SCHEDULING
	RPI				_POSIX_THREAD_ROBUST_PRIO_INHERIT
	RPP				_POSIX_THREAD_ROBUST_PRIO_PROTECT
	RS				_POSIX_RAW_SOCKETS
	SHM				_POSIX_SHARED_MEMORY_OBJECTS
	SIO				_POSIX_SYNCHRONIZED_IO
	SPN				_POSIX_SPAWN
	SS				_POSIX_SPORADIC_SERVER
	TCT				_POSIX_THREAD_CPUTIME
	TPI				_POSIX_THREAD_PRIO_INHERIT
	TPP				_POSIX_THREAD_PRIO_PROTECT
	TPS				_POSIX_THREAD_PRIORITY_SCHEDULING
	TSA				_POSIX_THREAD_ATTR_STACKADDR
	TSH				_POSIX_THREAD_PROCESS_SHARED
	TSP				_POSIX_THREAD_SPORADIC_SERVER
	TSS				_POSIX_THREAD_ATTR_STACKSIZE
	TYM				_POSIX_TYPED_MEMORY_OBJECTS
	XSI				_XOPEN_UNIX
  1. Single UNIX Specification

UNIX系统实现

  1. SVR4/4.4BSD/FreeBSD/Linux/Mac OS X/Solaris/AIX/HP-UX/IRIX/UnixWare

限制

  1. 编译时限制,与文件或目录无关的运行时限制,与文件或目录有关的运行时限制。
  2. ISO C限制
	CHAR_BIT
	CHAR_MAX
	CHAR_MIN
	SCHAR_MAX
	SCHAR_MIN
	UCHAR_MAX
	
	INT_MAX
	INT_MIN
	UINT_MAX
	
	SHRT_MAX
	SHRT_MIN
	USHRT_MAX
	
	LONG_MAX
	LONG_MIN
	ULONG_MAX
	
	LLONG_MAX
	LLONG_MIN
	ULLONG_MAX
	
	MB_LEN_MAX
	FOPEN_MAX
	TMP_MAX
	FILENAME_MAX
  1. POSIX限制
    数值限制,如LONG_BIT,SSIZE_MAX,WORD_BIT
    最小值
    最大值
    运行时可增加的值,如CHARCLASS_NAME_MAX,COLL_WEIGHTS_MAX,LINE_MAX,NGROUPS_MAX,RE_DUM_MAX
    运行时不变值
    其他不变值,如NL__ARGMAX, NL_MSGMAX, NL_SETMAX, NL_TEXTMAX
    路径名可变值,如FILESIZEBITS, LINK_MAX, MAX_CANON, MAX_INPUT, NAME_MAX, PATH_MAX, PIPE_BUF, SYMLINK_MAX
	_POSIX_ARG_MAX
	_POSIX_CHILLD_MAX
	_POSIX_DELAYTIMER_MAX
	_POSIX_HOST_NAME_MAX
	_POSIX_LINK_MAX
	_POSIX_LOGIN_NAME_MAX
	_POSIX_MAX_CANON
	_POSIX_MAX_INPUT
	_POSIX_NAME_MAX
	_POSIX_NGROUPS_MAX
	_POSIX_OPEN_MAX
	_POSIX_PATH_MAX
	_POSIX_PIPE_BUF
	_POSIX_RE_DUP_MAX
	_POSIX_RTSIG_MAX
	_POSIX_SEM_NSEMS_MAX
	_POSIX_SEM_VALUE_MAX
	_POSIX_SIGQUEUE_MAX
	_POSIX_SSIZE_MAX
	_POSIX_STREAM_MAX
	_POSIX_SYMLINK_MAX
	_POSIX_SYMLOOP_MAX
	_POSIX_TIMER_MAX
	_POSIX_TTY_NAME_MAX
	_POSIX_TZNAME_MAX
	
	// POSIX.1运行时不变值
	ARG_MAX
	ATEXIT_MAX
	CHILD_MAX
	DELAYTIMER_MAX
	HOST_NAME_MAX
	LOGIN_NAME_MAX
	OPEN_MAX
	PAGESIZE
	RTSIG_MAX
	SEM_NSEMS_MAX
	SEM_VALUE_MAX
	SIGQUEUE_MAX
	STREAM_MAX
	SYMLOOP_MAX
	TIMER_MAX
	TTY_NAME_MAX
	TZNAME_MAX
  1. XSI限制
    最小值
    运行时不变值
	NL_LANGMAX
	NZERO
	_XOPEN_IOV_MAX
	_XOPEN_NAME_MAX
	_XOPEN_PATH_MAX
  1. sysconf, pathconf, fpathconf
	#include <unistd.h>
	// 如name不是合适常量,返回-1,errno置为EINVAL。返回值是不确定值时,返回-1,但不改变errno。
	// _SC_运行时限制
	// _SC_ARG_MAX
	// _SC_ATEXIT_MAX
	// _SC_CHILD_MAX
	// _SC_CLK_TCK
	// _SC_COLL_WEIGHTS_MAX
	// _SC_DELAYTIMER_MAX
	// _SC_HOST_NAME_MAX
	// _SC_IOV_MAX
	// _SC_LINE_MAX
	// _SC_LOGIN_NAME_MAX
	// _SC_NGROUPS_MAX
	// _SC_OPEN_MAX
	// _SC_PAGE_SIZE
	// _SC_PAGESIZE
	// _SC_RE_DUP_MAX
	// _SC_RTSIG_MAX
	// _SC_SEM_NSEMS_MAX
	// _SC_SEM_VALUE_MAX
	// _SC_SIGQUEUE_MAX
	// _SC_STREAM_MAX
	// _SC_SYMLOOP_MAX
	// _SC_TIMER_MAX
	// _SC_TTY_NAME_MAX
	// _SC_TZNAME_MAX
	long sysconf(int name);
	
	// _PC_FILESIZEBITS						pathname/fd引用的文件可以需要是目录,返回值用于目录中文件名
	// _PC_LINK_MAX							pathname/fd引用的文件可以是文件或目录,如果是目录,返回值用于目录自身
	// _PC_MAX_CANON						pathname/fd引用的文件需要是终端文件	
	// _PC_MAX_INPUT						pathname/fd引用的文件需要是终端文件
	// _PC_NAME_MAX							pathname/fd引用的文件可以需要是目录,返回值用于目录中文件名
	// _PC_PATH_MAX							pathname/fd引用的文件可以需要是目录,指定的目录是工作目录时,返回值是相对路径名的最大长度
	// _PC_PIPE_BUF							pathname/fd引用的文件可以需要是管道、FIFO或目录,指定的目录是管道或FIFO时,返回值是对所引用管道或FIFO的限制值。对目录,返回值是对该目录下创建的任一FIFO的限制值
	// _PC_TIMESTAMP_RESOLUTION				pathname/fd引用的文件可以是文件或目录,如果是目录,返回值用于目录自身
	// _PC_SYMLINK_MAX						pathname/fd引用的文件可以需要是目录,返回值是该目录下符号链接可包含字符串的最大长度
	long pathconf(const char* pathname, int name);
	long fpathconf(int fd, int name);

个别情况下,动态查询结果可能有误。
6. 不确定的运行时限制
路径名
最大打开文件数

选项

POSIX.1定义了三种处理选项方法

  1. 编译时选项定义在<unistd.h>
  2. 与文件或目录无关的运行时选项用sysconf判断
  3. 与文件或目录有关的运行时选项用pathconf, fpathconf来判断
    对于每一个选项,有以下三种可能的平台支持状态
  4. 符号常量没定义或定义为-1.该平台编译时不支持相应选项。
  5. 符号常量定义值大于0,则该平台支持相应选项。
  6. 如符号常量定义值为0,需要用sysconf, pathconf, fpathconf来判断选项是否被支持。
先用_POSIX_X查询选项				_POSIX_X为0时,用动态查询
_POSIX_CHOWN_RESTRICTED			_PC_CHOWN_RESTRICTED			引用的文件需要为文件或目录,如为目录,指明选项是否可应用于目录下各个文件	
_POSIX_NO_TRUNC					_PC_NO_TRUNC					引用的文件需要为目录,返回值可用于目录中各个文件
_POSIX_VDISABLE					_PC_VDISABLE					引用的文件需要是终端文件
_POSIX_ASYNC_IO					_PC_ASYNC_IO					引用的文件不能是目录		
_POSIX_PRIO_IO					_PC_PRIO_IO						引用的文件不能是目录
_POSIX_SYNC_IO					_PC_SYNC_IO						引用的文件不能是目录
_POSIX2_SYMLINKS				_PC_2_SYMLINKS					引用的文件需要为目录


_POSIX_ASYNCHRONOUS_IO			_SC_ASYNCHRONOUS_IO
_POSIX_BARRIERS					_SC_BARRIERS
_POSIX_CLOCK_SELECTION			_SC_CLOCK_SELECTION
_POSIX_JOB_CONTROL				_SC_JOB_CONTROL
_POSIX_MAPPED_FILES				_SC_MAPPED_FILES
_POSIX_MEMORY_PROTECTION		_SC_MEMORY_PROTECTION
_POSIX_READER_WRITER_LOCKS		_SC_READER_WRITER_LOCKS
_POSIX_REALTIME_SIGNALS			_SC_REALTIME_SIGNALS
_POSIX_SAVED_IDS				_SC_SAVED_IDS
_POSIX_SEMAPHORES				_SC_SEMAPHORES
_POSIX_SHELL					_SC_SHELL
_POSIX_SPIN_LOCKS				_SC_SPIN_LOCKS
_POSIX_THREAD_SAFE_FUNCTIONS	_SC_THREAD_SAFE_FUNCTIONS	
_POSIX_THREADS					_SC_THREADS
_POSIX_TIMEOUTS					_SC_TIMEOUTS
_POSIX_TIMERS					_SC_TIMERS
_POSIX_VERSION					_SC_VERSION						标准发布年份,月份

_XOPEN_CRYPT					_SC_XOPEN_CRYPT
_XOPEN_REALTIME					_SC_XOPEN_REALTIME					
_XOPEN_REALTIME_THREADS			_SC_XOPEN_REALTIME_THREADS
_XOPEN_SHM						_SC_XOPEN_SHM
_XOPEN_VERSION					_SC_XOPEN_VERSION				系统支持的XSI版本

功能测试宏

// 功能测试宏,如_POSIX_C_SOURCE, _XOPEN_SOURCE
// 通常使用
linux>cc -D_POSIX_C_SOURCE=200809L file.c
// 或者源文件第一行设置为 #define _POSIX_C_SOURCE 200809L
// 或者
linux>gcc -D_XOPEN_SOURCE=700 file.c -o file

基本系统数据类型

clock_t
comp_t
dev_t
fd_set
fpos_t
gid_t
ino_t
mode_t
nlink_t
off_t
pid_t
pthread_t
ptrdiff_t
rlim_t
sig_atomic_t
sigset_t
size_t
ssize_t
time_t
uid_t
wchar_t

标准间冲突

一般ISO C和POSIX.1冲突时,服从ISO C
某些差别,
ISO C和POSIX.1用同一种数据类型(clock_t)保存对时间的测量,但定义了不同的单位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值