retrieving all group names with a given group number

hi,

which Unix/C function can i use to retrieve all group names with a particular group id?

The following C code prints out the group id number of a particular group name:
------------------------------------------------------------------------
#include <stdio.h>
#include <grp.h>

int main(int argc, char * argv[]){
struct group * info;
char ** members;
int i=1;
if(argc < 2){
fprintf(stderr, "usage: %s groupname\n", argv[0]);
exit(-1);
}
info = getgrnam(argv[1]);
if(info == NULL){
printf("%s: no such group\n", argv[1]);
}
else{
printf("group name: %s\n", info -> gr_name);
printf("group id number: %d\n", info -> gr_gid);
}
}
------------------------------------------------------------------

% a.out vulcan1
group name: vulcan1
group id number: 15100

% a.out vulcan2
group name: vulcan2
group id number: 15100

% a.out vulcan3
group name: vulcan3
group id number: 15100

///////////////////////////////////////////////////
I'm looking for a C function that returns "vulcan1", "vulcan2", and "vulcan3"
when I pass in the group id of 15100 (there are only 3 groups with group id of 15100).

Thanks
--Andrew

You were nearly there. All you had to do was walk the array of pointers (**gr_mem) to the individual users.
To use a group id instead of a group name, replace getgrnam() with getgrgid()

#include <stdio.ho
#include <stdlib.h>
#include <grp.h>

int main(int argc, char * argv[])
{
   struct group *info;
   char **members;

   if (argc < 2) {
      fprintf(stderr, "usage: %s groupname\n", argv[0]);
      exit(1);
   }

   if ((info = getgrnam(argv[1])) == (struct group *)NULL) {
       printf("%s: no such group\n", argv[1]);
       exit(2);
   }

   printf("group name: %s\n", info->gr_name);
   printf("group id number: %d\n", info->gr_gid);
   members = info->gr_mem;
   while (*members)
      printf ("group member: %s\n", *members++);
}

~

or you could use lsuser and grep out what ever you want.

for example
lsuser ALL | grep goups=struct | awk '{print $1 " " $2 " " $3}'

see man lsuser

thanks for the responses. I am able to get what i need now.

--Andrew