使用getcwd(NULL, 0)还是get_current_dir_name()更好?什么是常见的做法?
我不知情的猜测是,调用getcwd(NULL, 0)可能是一个更好的主意,因为可能PWD变量没有设置.
发布于 2021-01-13 12:37:56
使用
getcwd(NULL, 0)还是get_current_dir_name()更好?什么是常见的做法?
这是特定于操作系统的。我猜你用的是Linux。
然后,阅读系统(2)和getcwd(3)。研究其在GNU libc或musl libc中实现的源代码。
请注意
getcwd接受给定大小的缓冲区。实际上,256字节可能足够多,但原则上缓冲区应该大得多。见sysconf(3)和路径(3)。接受getcwd(NULL,0)是一个相当于get_current_dir_name()的扩展,因此使用malloc并可能失败。我的Debian计算机在/usr/include/linux/limits.h中有一个宏定义的#define PATH_MAX 4096 (但是4096,当用作某些自动变量的大小时,对于任何递归函数的呼叫帧来说都是非常重要的;也可以查看nftw(3))。getwd是过时的,因为它容易发生缓冲区溢出。不要在2021年使用它。get_current_dir_name使用可能失败的malloc(3)。getcwd(3)不应该使用PWD环境变量。如果您使用它来编写您自己的/sbin/init,它应该可以工作。
有时,您可以启动运行/bin/bash而不是/sbin/init的Linux内核。在这种情况下,不设置PWD环境变量。见环境(7)和全权证书(7)。
当然,在大多数其他程序中,PWD是正确设置的(例如,通过GNU bash,您可以学习它的源代码,因为它是自由软件)。
我个人的建议
path中使用C动态内存分配 .所以几乎相当于get_current_dir_name。别忘了free它!当然,如果为某些机器人编写init-like程序,这还不够好。火星上的机器人可能会产生长路径名称!
https://stackoverflow.com/questions/65702034
复制相似问题