sentto2 发表于 2015-04-28 19:01

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

APUE里面说,系统定义的最大路经长度等数值,需要通过sysconf调用去得到。
那么我的问题是,头文件里面我们已经定义了PATH_MAX之类的宏可以直接用的,编译时就已经知道了。

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

zsszss0000 发表于 2015-04-28 19:01

因为系统限制和选项会影响应用程序的行为,所以可移植的程序需要获取
1在编译的时候,能够获取一些,比如int类型的最大数值
2另外一些可能再程序运行的时候发生变化,所以需要调用这样的函数去sysconf去在运行的时候获取

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


回复 6# sentto2


   

zsszss0000 发表于 2015-04-28 19:19

编译时,是可以知道的,但是如果在运行的时候确定的话,也可以选择sysconf或者pathconf或者fpathconf这样的函数

sentto2 发表于 2015-04-28 21:01

zsszss0000 发表于 2015-04-28 19:19 static/image/common/back.gif
编译时,是可以知道的,但是如果在运行的时候确定的话,也可以选择sysconf或者pathconf或者fpathconf这样的 ...

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

zsszss0000 发表于 2015-04-28 21:56

为了在运行时获取回复 3# sentto2


   

zsszss0000 发表于 2015-04-29 09:23

阅读Linux/unix系统编程手册 11章 对这一部分进行了描述

sentto2 发表于 2015-04-29 09:28

zsszss0000 发表于 2015-04-29 09:23 static/image/common/back.gif
阅读Linux/unix系统编程手册 11章 对这一部分进行了描述

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

sentto2 发表于 2015-04-29 16:08

zsszss0000 发表于 2015-04-29 15:34 static/image/common/back.gif
因为系统限制和选项会影响应用程序的行为,所以可移植的程序需要获取
1在编译的时候,能够获取一些,比如i ...

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

醍醐灌顶了!

zsszss0000 发表于 2015-04-29 16:10

其实我也不懂,只不过书上是那么写的,就去查了一下书而已回复 8# sentto2


   

bfdhczw 发表于 2015-04-29 16:57

如果你在你自己的电脑上编译,但是要在别人的电脑上运行呢?

你怎么知道你们两个的系统在编译时使用的PATH_MAX值一定相同?
页: [1] 2
查看完整版本: 既然系统头文件定义了PATH_MAX之类的宏,为什么还要sysconf去动态得到呢?