免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5259 | 回复: 10
打印 上一主题 下一主题

[Linux] 既然系统头文件定义了PATH_MAX之类的宏,为什么还要sysconf去动态得到呢? [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-28 19:01 |只看该作者 |倒序浏览
10可用积分
APUE里面说,系统定义的最大路经长度等数值,需要通过sysconf调用去得到。
那么我的问题是,头文件里面我们已经定义了PATH_MAX之类的宏可以直接用的,编译时就已经知道了。

为什么还需要在运行时动态的调用sysconf去得到最大路径长度呢?
难道这两个值可以不一样? 如果可以不一样的话,什么情况下用哪一个?

最佳答案

查看完整内容

因为系统限制和选项会影响应用程序的行为,所以可移植的程序需要获取1在编译的时候,能够获取一些,比如int类型的最大数值2另外一些可能再程序运行的时候发生变化,所以需要调用这样的函数去sysconf去在运行的时候获取比如路径名变量值,如NAME_MAX,这个变量不仅仅可能不同的文件系统,也不一样,所以应用程序应该主动去获取。回复 6# sentto2

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
2 [报告]
发表于 2015-04-28 19:01 |只看该作者
因为系统限制和选项会影响应用程序的行为,所以可移植的程序需要获取
1在编译的时候,能够获取一些,比如int类型的最大数值
2另外一些可能再程序运行的时候发生变化,所以需要调用这样的函数去sysconf去在运行的时候获取

比如路径名变量值,如NAME_MAX,这个变量不仅仅可能不同的文件系统,也不一样,所以应用程序应该
主动去获取。


回复 6# sentto2


   

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
3 [报告]
发表于 2015-04-28 19:19 |只看该作者
编译时,是可以知道的,但是如果在运行的时候确定的话,也可以选择sysconf或者pathconf或者fpathconf这样的函数

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
4 [报告]
发表于 2015-04-28 21:01 |只看该作者
zsszss0000 发表于 2015-04-28 19:19
编译时,是可以知道的,但是如果在运行的时候确定的话,也可以选择sysconf或者pathconf或者fpathconf这样的 ...


我的意思是,既然已经有了编译时可以用的宏,为什么还要有sysconf之类的函数呢?

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
5 [报告]
发表于 2015-04-28 21:56 |只看该作者
为了在运行时获取回复 3# sentto2


   

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
6 [报告]
发表于 2015-04-29 09:23 |只看该作者
阅读Linux/unix系统编程手册 11章 对这一部分进行了描述

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
7 [报告]
发表于 2015-04-29 09:28 |只看该作者
zsszss0000 发表于 2015-04-29 09:23
阅读Linux/unix系统编程手册 11章 对这一部分进行了描述


我的问题是,既然编译的时候就有这个宏了,干嘛还要运行时去获取呢?
好像ulimit之类的命令并不能在系统启动以后,去动态的改变"最大的路径长度"这一类的参数吧?

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
8 [报告]
发表于 2015-04-29 16:08 |只看该作者
zsszss0000 发表于 2015-04-29 15:34
因为系统限制和选项会影响应用程序的行为,所以可移植的程序需要获取
1在编译的时候,能够获取一些,比如i ...


嗯,你提醒我了,如果linux挂在一个sd卡,是FAT文件系统的话,最大的文件名长度就是8个字符。
所以必须运行时获取!

醍醐灌顶了!

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
9 [报告]
发表于 2015-04-29 16:10 |只看该作者
其实我也不懂,只不过书上是那么写的,就去查了一下书而已回复 8# sentto2


   

论坛徽章:
2
2015年亚洲杯之乌兹别克斯坦
日期:2015-04-15 15:43:482015亚冠之迪拜阿赫利
日期:2015-06-30 20:36:46
10 [报告]
发表于 2015-04-29 16:57 |只看该作者
如果你在你自己的电脑上编译,但是要在别人的电脑上运行呢?

你怎么知道你们两个的系统在编译时使用的PATH_MAX值一定相同?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP