⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utmplib.c

📁 understanding unix/linux programming source code(bruce molay)
💻 C
字号:
/* utmplib.c  - functions to buffer reads from utmp file  * *      functions are *              utmp_open( filename )   - open file *                      returns -1 on error *              utmp_next( )            - return pointer to next struct *                      returns NULL on eof *              utmp_close()            - close file * *      reads NRECS per read and then doles them out from the buffer */#include        <stdio.h>#include        <fcntl.h>#include        <sys/types.h>#include        <utmp.h>#define NRECS   16#define NULLUT  ((struct utmp *)NULL)#define UTSIZE  (sizeof(struct utmp))static  char    utmpbuf[NRECS * UTSIZE];                /* storage      */static  int     num_recs;                               /* num stored   */static  int     cur_rec;                                /* next to go   */static  int     fd_utmp = -1;                           /* read from    */utmp_open( char *filename ){        fd_utmp = open( filename, O_RDONLY );           /* open it      */        cur_rec = num_recs = 0;                         /* no recs yet  */        return fd_utmp;                                 /* report       */}struct utmp *utmp_next(){        struct utmp *recp;        if ( fd_utmp == -1 )                            /* error ?      */                return NULLUT;        if ( cur_rec==num_recs && utmp_reload()==0 )    /* any more ?   */                return NULLUT;                                        /* get address of next record    */        recp = ( struct utmp *) &utmpbuf[cur_rec * UTSIZE];        cur_rec++;        return recp;}int utmp_reload()/* *      read next bunch of records into buffer */{        int     amt_read;                                                /* read them in         */        amt_read = read( fd_utmp , utmpbuf, NRECS * UTSIZE );                                                   /* how many did we get? */        num_recs = amt_read/UTSIZE;                                                /* reset pointer        */        cur_rec  = 0;        return num_recs;}utmp_close(){        if ( fd_utmp != -1 )                    /* don't close if not   */                close( fd_utmp );               /* open                 */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -