第四篇:“ 不确定 "限制值的使用
前言
前篇文章解释了限制值的五种类型以及获取它们的方法。但是对于其中可能不确定的类型( 45类型 ),当限制值获取函数返回-1的时候,我们无法仅通过这个函数返回值-1来判断是限制值获取失败还是限制值是不确定的,因为这两种情况函数的返回值均为-1。这样就给编程带来了不变。
本文将教你如何获取到未确定类型的限制值的真正情况。
解决思路
可以在调用限制值获取函数之前,先将errno变量置为0。调用之后,如果函数返回-1,那么有两种情况:1. errno依然为0,这表示该限制值是不确定的。2. errno不为0,这表示限制值获取出错了;如果函数返回的数不是-1,那说明该限制值是确定的并已作为函数返回值传回了。
代码示例
下面的代码展示了一个函数,它的功能是为路径名分配存储区( 体现了未确定限制值使用的方法 ):
#include "apue.h"
#include <errno.h>
#include <limits.h> // 如果已经定义了PATH_MAX,则pathmax就赋值为它。
#ifdef PATH_MAX
static int pathmax = PATH_MAX;
#else
// 如果没有则pathmax初始化为0
static int pathmax = ;
#endif #define SUSV3 200112L static long posix_version = ; #define PATH_MAX_GUESS 1024 char *
path_alloc(int *sizep) // sizep指向的整型变量用来存放最终分配空间的大小
{
char *ptr;
int size; if (posix_version == )
posix_version = sysconf(_SC_VERSION); // 第一次执行此函数时
if (pathmax == ) {
// 先将errno置0
errno = ;
if ((pathmax = pathconf("/", _PC_PATH_MAX)) < ) {
// 如果限制值获取函数返回-1并且errno没改,则说明该值是不确定的,我们赋给它一个缺省的值。
if (errno == )
pathmax = PATH_MAX_GUESS;
else
// 如果限制值获取函数返回-1并且errno被设置了,则说明限制值获取失败,退出函数。
err_sys("pathconf error for _PC_PATH_MAX");
} else {
// 加上根目录的长度
pathmax++;
}
}
if (posix_version < SUSV3)
// 如果不是SUSV3的话则要给末尾的\n也分配空间
size = pathmax + ;
else
size = pathmax; if ((ptr = malloc(size)) == NULL)
err_sys("malloc error for pathname"); // 将分配空间的大小赋给sizep指向的整型变量
if (sizep != NULL)
*sizep = size;
return(ptr);
}
第四篇:“ 不确定 "限制值的使用的更多相关文章
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 第四篇 Entity Framework Plus 之 Batch Operations
用 Entity Framework 进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- 深入理解javascript作用域系列第四篇——块作用域
× 目录 [1]let [2]const [3]try 前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用 ...
- 前端工程师技能之photoshop巧用系列第四篇——图片格式
× 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...
- IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)
IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...
- RabbitMQ学习总结 第四篇:发布/订阅 Publish/Subscribe
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
随机推荐
- hibernate 多对一关联
(转自尚学堂教学内容) 注解多对一: package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.pers ...
- CentOS7关闭默认防火墙启用iptables防火墙
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤. 1.关闭firewall: systemctl stop firewalld.service #停止f ...
- SQL语句创建相同结构的表
--Oracle的语句create table sa_salaryRecord as select * from sa_salary where 1=2; --MSSQL的语句select * int ...
- 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
在Win7中IIS配置Asp.Net虚拟文件夹的方法总结! 一.右键[站点].点击[加入虚拟文件夹]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,由于这就跟一个站点差点儿相同.不用考虑路径问题. ...
- Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结
Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结 1. 注册表是树形数据库 1 2. 注册表的由来 1 3. Java 操作注册表 2 3.1. 使用Preferences ...
- PHP系统学习3 正则
正则 ^shop 标示匹配与shop开头的字符串 shop$用来匹配与shop结尾的字符串 ^shop$只匹配shop [a-z]匹配所有小写字母 [A-Z]匹配所有大写字母 [a-zA-Z]匹配所有 ...
- Codeforces Round #297 (Div. 2) 525D Arthur and Walls(dfs)
D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input standard ...
- Java序列化与反序列化学习(三):序列化机制与原理
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的 过程.Java序列化API提供 ...
- tensorflow 之模型的保存与加载(二)
上一遍博文提到 有些场景下,可能只需要保存或加载部分变量,并不是所有隐藏层的参数都需要重新训练. 在实例化tf.train.Saver对象时,可以提供一个列表或字典来指定需要保存或加载的变量. #!/ ...
- matlab和C/C++混合编程--Mex (转载)
matlab和C/C++混合编程--Mex 最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续 ...