📄 getgrent.c
字号:
#include <stdio.h>#include <grp.h>#include <stdlib.h>#define CL ':'#define CM ','#define NL '\n'#define MAXGRP 100static char GROUP[] = "/etc/group";static FILE *grf = NULL;static char line[BUFSIZ+1];static struct group group;static char *gr_mem[MAXGRP];setgrent(){ if( !grf ) grf = fopen( GROUP, "r" ); else rewind( grf );}endgrent(){ if( grf ){ fclose( grf ); grf = NULL; }}static char *grskip(register char *p, register c){ while( *p && *p != c ) ++p; if( *p ) *p++ = 0; return( p );}struct group *getgrent(){ register char *p, **q; if( !grf && !(grf = fopen( GROUP, "r" )) ) return(NULL); if( !(p = fgets( line, BUFSIZ, grf )) ) return(NULL); group.gr_name = p; p = grskip(p,CL); /* passwd */ group.gr_gid = atoi(p = grskip(p,CL)); group.gr_mem = gr_mem; p = grskip(p,CL); grskip(p,NL); q = gr_mem; while( *p ){ *q++ = p; p = grskip(p,CM); } *q = NULL; return( &group );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -