如何在 freeBSD 系统中增加 MAX_PATH_LENGTH?

How can I increase the MAX_PATH_LENGTH in a freeBSD system?

我正在编写一个类似于 'find' 的实用程序来搜索基于 freebsd 的系统中的某些特定文件。 freeBSD 9 中的 stat() 调用可以接受长度为 1024 个字符的路径,尽管 linux 支持最多 4K 个字符的路径。

系统本身有一个不同于 freeBSD 的文件系统(它是一个商业 OS)并且该文件系统对 MAX_PATH_LENGTH 有很高的限制。

如果某些用户在 linux 上安装了一个卷并创建了一个路径长度大于 1K 的目录层次结构,那么尽管文件系统将支持它,但 freeBSD lstat/stat 调用将失败。

是否有解决办法,或者我能否以某种方式提高此限制?

您应该可以通过提高 PATH_MAX in /usr/src/sys/sys/syslimits.h and doing a full rebuild of the entire system (kernel, libraries, and any installed software that uses PATH_MAX, MAXPATHLEN, or MAXINTERP). Just make sure to keep it under 64k 的值来做到这一点。

如果你真的走这条路,请避免使用二进制包(比如通过 pkg、portmaster 或 portupgrade)。坚持编译和安装 /usr/ports,你会没事的。