gpt4 book ai didi

C: 函数 ‘getpwnam_r’ 的隐式声明

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:07 26 4
gpt4 key购买 nike

在密码数据库(例如,本地密码文件 /etc/passwd、NIS 和 LDAP)中检索与提供的用户名匹配的记录的断开字段时,我是使用 getpwnam_r ( http://linux.die.net/man/3/getpwnam_r ) 函数。

#define __USE_BSD
#define _BSD_SOURCE
#include <pwd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

int
main(int argc, char *argv[])
{
struct passwd pwd;
struct passwd *result;
char *buf;
size_t bufsize;
int s;

if (argc != 2) {
fprintf(stderr, "Usage: %s username\n", argv[0]);
exit(EXIT_FAILURE);
}

bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
if (bufsize == -1) /* Value was indeterminate */
bufsize = 16384; /* Should be more than enough */

buf = malloc(bufsize);
if (buf == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}

s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result);
if (result == NULL) {
if (s == 0)
printf("Not found\n");
else {
errno = s;
perror("getpwnam_r");
}
exit(EXIT_FAILURE);
}

printf("Name: %s; UID: %ld\n", pwd.pw_gecos, (long) pwd.pw_uid);
exit(EXIT_SUCCESS);
}

代码工作正常,但 Eclipse 显示如下警告:

warning: implicit declaration of function ‘getpwnam_r’ [-Wimplicit-function-declaration]

我该如何解决?

请注意,我目前使用的是 Ubuntu 14.04 LTS

最佳答案

要使用这个函数你需要两个包含:

#include <sys/types.h>
#include <pwd.h>

添加它们,它应该不会再提示了。

您可以通过运行 man getpwnam_r 看到这一点.

您还需要定义 __USE_MISC__USE_SVID,因为它是一个仅适用于 POSIX 的函数。

关于C: 函数 ‘getpwnam_r’ 的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com