#define _GNU_SOURCE #include #include #include #include #include #include #include #include #include int main(void) { struct group *g = malloc(sizeof(struct group)); struct group *g_result = malloc(sizeof(struct group)); char *buf; int ret; long buflen = sysconf(_SC_GETGR_R_SIZE_MAX); buf = malloc(buflen); errno = 0; ret = getgrgid_r(10001, g, buf, buflen, &g_result); printf("getgrgid_r ret=%d, result=%p, errno=%d\n", ret, g_result, errno); errno = 0; ret = getgrnam_r("superman", g, buf, buflen, &g_result); printf("getgrnam_r ret=%d, result=%p, errno=%d\n", ret, g_result, errno); struct passwd *pwd = malloc(sizeof(struct passwd)); struct passwd *p_result = malloc(sizeof(struct passwd)); buflen = sysconf(_SC_GETPW_R_SIZE_MAX); errno = 0; ret = getpwnam_r("superman", pwd, buf, buflen, &p_result); printf("getpwnam_r ret=%d, result=%p, errno=%d\n", ret, p_result, errno); errno = 0; ret = getpwuid_r(10001, pwd, buf, buflen, &p_result); printf("getpwuid_r ret=%d, result=%p, ernno=%d\n", ret, p_result, errno); struct servent *s_result = NULL; int port = htons(3); char *protop = NULL; struct servent s = { 0, }; errno = 0; ret = getservbyport_r(port, protop, &s, buf, buflen, &s_result); printf("getservbyport_r ret=%d, result=%p, errno=%d\n", ret, s_result, errno); errno = 0; ret = getservbyname_r("superman", protop, &s, buf, buflen, &s_result); printf("getservbyname_r ret=%d, result=%p, errno=%d\n", ret, s_result, errno); errno = 0; ret = initgroups("superman", getgid()); printf("initgroups ret=%d, errno=%d\n", ret, errno); errno = 0; ret = getservent_r(&s, buf, buflen, &s_result); printf("getservent_r: ret=%d, result=%p, errno=%d\n", ret, s_result, errno); char *host, *user, *domain; errno = 0; ret = getnetgrent_r(&host, &user, &domain, buf, buflen); printf("getnetgrent_r: ret=%d, errno=%d\n", ret, errno); errno = 0; ret = innetgr("superman", NULL, NULL, NULL); printf("innetgr: ret=%d, errno=%d\n", ret, errno); return 0; }