我应该为 Linux 上最长的用户名或组名创建多大的缓冲区?
Linux 上用户名或组名的最大字符数是多少?
我需要分配一个缓冲区,并且想知道需要分配多少空间以保证它对于我的应用程序可能遇到的任何组或用户名来说都足够大。
What is the maximum number of characters that a user name or group name may be on Linux?
I need to allocate a buffer and would like to know how much space I need to allocate to guarantee it is large enough for whatever group or user name my application might encounter.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
(现在问题已重新开放,将我的评论放入答案中)
POSIX 指定 LOGIN_NAME_MAX 必须 >= _POSIX_LOGIN_NAME_MAX。 _POSIX_LOGIN_NAME_MAX 又被定义为 9。在 Linux 上,LOGIN_NAME_MAX 似乎是 256。
对于组,我认为没有类似的东西。可以通过 getgrnam_r() 和 getgrgid_r() 函数来猜测某种上限,这些函数采用用户为 struct group 中的 char* 条目提供的缓冲区。该缓冲区所需的最大大小可以通过 sysconf(_SC_GETGR_R_SIZE_MAX) 或宏 NSS_BUFLEN_GROUP 检索。在 Linux 上,NSS_BUFLEN_GROUP 似乎是 1024。
(Putting my comment into an answer now that the question has been reopened)
POSIX specifies that LOGIN_NAME_MAX must be >= _POSIX_LOGIN_NAME_MAX. _POSIX_LOGIN_NAME_MAX, in turn, is defined to 9. On Linux it seems LOGIN_NAME_MAX is 256.
For groups, I don't think there is anything similar. Some kind of upper bound can be guesstimated via the getgrnam_r() and getgrgid_r() functions, which take a user supplied buffer for the char* entries in struct group. The maximum needed size for this buffer can be retrieved via sysconf(_SC_GETGR_R_SIZE_MAX) or the macro NSS_BUFLEN_GROUP. On Linux, NSS_BUFLEN_GROUP seems to be 1024.