1
0
Files
irix-657m-src/eoe/cmd/ns/tests/sub_groups.c
2022-09-29 17:59:04 +03:00

81 lines
1.6 KiB
C

#include <stdio.h>
#include <pthread.h>
#include <grp.h>
#include "sub_groups.h"
void
sub_getgrent()
{
struct group g, g2;
int i;
struct group *r;
char buf[4096];
pthread_t th1, th2;
pthread_t th;
th = pthread_self();
while (getgrent_r(&g, buf, sizeof(buf))) {
printf("Thread %d :entry: name = %s, passwd = %s, gid = %d\n",
th, g.gr_name, g.gr_passwd, g.gr_gid);
for (i = 0; g.gr_mem[i]; i++) {
printf("\tmember[%d]: %s\n", i, g.gr_mem[i]);
}
pthread_create(&th1,
NULL,
(void*)sub_getgrnam_r,
(void *)g.gr_name);
pthread_create(&th2,
NULL,
(void *)sub_getgrgid_r,
(void *)g.gr_gid);
/* Join the threads */
pthread_join(th1, NULL);
pthread_join(th2, NULL);
}
}
void
sub_getgrnam_r(char *name)
{
struct group g2;
char buf[4096];
char grname[56];
struct group *r;
strcpy(grname, name);
if (getgrnam_r(grname,&g2, buf, sizeof(buf), &r)) {
fprintf(stderr, "failed getgrnam: %s\n", grname);
}
else if(r) {
printf("======getgrnam_r()===== : name = %s, passwd = %s, gid = %d\n",
g2.gr_name, g2.gr_passwd, g2.gr_gid);
}
else {
fprintf(stderr, "failed getgrnam: %s\n", grname);
}
}
void
sub_getgrgid_r(int gid)
{
struct group g2;
char buf[4096];
int groupid;
struct group *r;
groupid = gid;
if (getgrgid_r(groupid,&g2, buf, sizeof(buf), &r)) {
fprintf(stderr, "failed getgrgid_r: %d\n", groupid);
}
else if(r) {
printf("======getgrgid_r()===== : gid = %d, name = %s, passwd = %s\n",
g2.gr_gid, g2.gr_name, g2.gr_passwd);
}
else {
fprintf(stderr, "failed getgrgid_r: %d\n", groupid);
}
}