UNIX环境高级编程笔记1-sysconf、pathconf和fpathconf函数

POSIX是可移植操作系统接口(Portable Operating System Interface)的首字母缩写。POSIX是基于UNIX的,这一标准意在期望获得源代码级的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。POSIX标准定义了操作系统应该为应用程序提供的接口:系统调用集。POSIX是由IEEE(Institute of Electrical and Electronic Engineering)开发的,并由ANSI(American National Standards Institute)和ISO(International Standards Organisation)标准化。大多数的操作系统(包括Windows NT)都倾向于开发它们的变体版本与POSIX兼容。 POSIX1.0是其中一种.

1. 限制

Unix系统实现定义了很多幻数和常量,这些在不同程度上依从POSIX,也遵从POSIX.1标准。这就有助于软件的可移植性。
以下两种类型的限制是必须的:
1) 编译时限制(例如,短整型的最大值是什么?)
2) 运行时限制(例如,文件名可以有多少个字符?)

编译时限制可在头文件中定义,程序在编译时可以包含头文件。但是,运行时限制则要求进程调用一个函数以获取限制值。
为了解决此类问题,提供了3中限制:
1) 编译时限制(头文件)
2) 与文件或目录无关的运行时限制(sysconf函数,获取系统执行的配置信息,如CPU数)
3) 与文件或目录相关的运行时限制(pathconf和fpathconf函数)

2. 函数原型

#include <unistd.h>
long int sysconf(int parameter);
long int pathconf(const char *pathname,int parameter);
long int fpathconf(int filedes,int parameter);

后两个函数之间的区别是:一个用路径名作为参数,另一个则取文件描述符作为参数。

sysconf()用于确定当前的系统变量之值(即限制值和特征选项),其中参数parameter指出要询问的是哪个系统变量,它应当是头文件<unistd.h>中定义的以'_SC_'开头的符号常数之一。sysconf函数所使用的name参数,用于标识系统限制。以_SC_开始的则用作标示运行时限制的sysconf参数。

函数pathconf()和fpathconf()作用相同,它们都用于查询与文件系统限制和选项有关的值,不同的只是pathconf()作用于文件名pathname,而fpathconf()作用于已打开的文件描述字 filedes。参数parameter必须是定义在头文件<unistd.h>中以'_PC_'开头的符号常数之一

返回值:

(1)如果 name 不是一个合适的常量,则所有三个函数都会返回-1,并将 errno 设置为 EINVAL。
(2)有些 name 可以返回变量的值(返回值>=0),或者返回-1,这表示该值是不确定的,此时不改变 errno 的值。

因此,程序要检查错误,应该在调用 sysconf() 之前将 errno 设置为 0 ,然后如果返回 -1,则检验到错误。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值