getpwent()

http://baike.baidu.com/link?url=XcTB74zhdRLwFaqFIP73u-hSpZgGqYejqnnHGTRfhNF8B7Z2yO4pVwaFaMK24Hkk6nyecIwuIlRTYL5yMq6wR_

getpwent()

getpwent()是一种函数,功能是用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。

外文名
getpwent()
头文件
#include<pwd.h>
原    型
strcut passwd * getpwent
说    明
用来从密码文件中读取用户数据

目录

  1. 1 头文件
  2. 2 函数原型
  3. 3 说明
  4. 4 返回值
  5. 5 范例

头文件

编辑

#include<pwd.h>

#include<sys/types.h>

函数原型

编辑

strcut passwd * getpwent(void);

说明

编辑

getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。第一次调用时会取得第一位用户数据,之后每调用一次就会返回下一项数据,直到已无任何数据时返回NULL。

passwd 结构定义如下

struct passwd{

char * pw_name; /*用户账号*/

char * pw_passwd; /*用户密码*/

uid_t pw_uid; /*用户识别码*/

gid_t pw_gid; /*组识别码*/

char * pw_gecos; /*用户全名*/

char * pw_dir; /*家目录*/

char * pw_shell; /* 所使用的shell路径*/

};

getpwent()在第一次调用时会打开密码文件,读取数据完毕后可使用endpwent()来关闭该密码文件。错误代码ENOMEM 内存不足,无法配置passwd结构。

返回值

编辑

返回passwd 结构数据,如果返回NULL 则表示已无数据,或有错误发生。

范例

编辑

#include<pwd.h>

#include<sys/types.h>

main()

{

struct passwd *user;

while((user = getpwent())!=0){

printf(“%s:%d:%d:%s:%s:%s\n”,user->pw_name,user-

>pw_uid,user->pw_gid,

user->pw_gecos,user->pw_dir,user->pw_shell);

}

endpwent();

}

执行 root:0:0:root:/root:/bin/bash

bin:1:1:bin:/bin:

daemon:2:2:daemon:/sbin:

adm:3:4:adm:/var/adm:

lp:4:7:lp:/var/spool/lpd:

sync:5:0:sync:/sbin:/bin/sync

shutdown:6:0:shutdown:/sbin:/sbin/shutdown

halt:7:0:halt:/sbin:/sbin/halt

mail:8:12:mail:/var/spool/mail:

news:9:13:news:var/spool/news

uucp:10:14:uucp:/var/spool/uucp:

operator:11:0:operator :/root:

games:12:100:games:/usr/games:

gopher:13:30:gopher:/usr/lib/gopher-data:

ftp:14:50:FTP User:/home/ftp:

nobody:99:99:Nobody:/:

xfs:100:101:X Font Server: /etc/Xll/fs:/bin/false

gdm:42:42:/home/gdm:/bin/bash

kids:500:500: : /home/kids:/bin/bash

时间: 2024-10-06 06:59:49

getpwent()的相关文章

III (二十三)OpenLDAP

目录服务: 目录是一类为了浏览和搜索数据而设计的特殊的数据库,目录服务是按照树状形式存储信息,目录包含基于属性的描述性信息,并且支持高级的过滤功能,如microsoft的active directory活动目录就是目录数据库的一种: a directory is like a phone book,and is not like a directory(folder) on your computer 一般目录不支持大多数事务型数据库所支持的高吞吐量和复杂的更新操作,目录进行更新操作是要么全部要

第十四篇:获取系统数据文件信息

前言 在 Linux 中,系统数据文件大都不能直接用编辑的方式读取.如此设计一方面是从安全性考虑,另一方面则是从文件检索效率考虑.本文将以口令文件 passwd 为例讲解读取 Linux 中系统数据文件的方法. 基本步骤 1. 包含读写该系统数据文件的专用头文件 ( 如读写口令文件要包含 pwd.h 组文件则是 grp.h ) 2. 使用 set 函数打开文件        3. 使用 get 函数读取下一个记录        4. 使用 end 函数关闭此文件 另,如果数据文件支持某种形式的关

ldap统一认证架构方案及实现指南(一)

一.ldap目录服务介绍什么是目录服务?  目录是一类为了浏览和搜索数据而设计的特殊的数据库.例如,为人所熟知的微软公司的活动目录(active directory)就是目录数据库的一种.目录服务是按照树状形式存储信息的,目录包含基于属性的描述性信息,并且支持高级的过滤功能. 什么是LDAP?  LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X.

Postfix常用配置

SMTP-->SMTPS ESMTP POP3邮局协议 IMAP4互联网邮件访问协议 SASL简单认证安全层 MDA邮件投递代理 procmail,maildrop MUA邮件用户代理 mutt,mail [email protected] --> c.com(MX)-->[email protected] Mail Relay邮件中继 MTA:sendmail qmail postfix exim Postfix:模块化设计, master (/etc/postfix/master.c

APUE读书笔记-第六章 系统数据文件和信息

昨天看完了,今天来看看第六章.感觉第六章的内容不是非常重要.简单看看吧 6.2 口令文件 口令文件其实就是/etc文件夹下的passwd文件,但处于安全性的考虑,我们无法直接读取它.就是通过直接限制权限的方式对其进行保护,passwd文件具体权限如下: -rw-r--r-- 1 root root 可以看到只有root用户具有读写权限,与root同组的用户与其他用户仅具有读权限. 不过为了解决以上问题,Linux中给出了一系列数据结构与函数帮助我们操纵口令文件,首先是关键数据结构,定义位于/in

系统时间错误导致make命令实际在循环执行configure命令

特征屏幕轮番出现checking的字符基本可以确定系统时间是有问题: checking for --enable-universalsdk... no  checking for --with-universal-archs... 32-bit  checking MACHDEP... linux2  checking EXTRAPLATDIR...   checking machine type as reported by uname -m... i686  checking for --w

linux高级编程补充知识

F: 计算机系统结构: ------------------------------- 应用程序 ----------------- |  库函数 ------------------------------- 系统调用 ------------------------------- 虚拟文件系统  |    进程模块 -(文件模块)-|   进程间通信 设备文件     | ------------------------------- 硬 件 ------------------------

Linux编程-回忆录三

====系统环境====#include <unistd.h>pid_t getpid(void);得到当前进程的进程ID号,永远成功 #include <stdlib.h>char *getenv(const char *name);得到给定环境变量名称的值,如果没有该变量,返回NULL值 #include <stdlib.h>int putenv(char *string);添加一个新的环境变量,传入的字符串格式为: "name=value"传入

Linux环境

1. 程序参数 1.1 main 函数的形式 查看C语言最新标准 int main () {/* ... */} // 为C++的标准 int main(int argc, char *argv[]) {/* ... */} // 其中argc是程序参数的个数,argv代表参数自身的字符串数组. main() {/* ... */} // C90标准允许这种形式,但是C99标准不允许.因此即使你当前的编译器允许,也不要这么写. main的参数通过另一个程序提供,这个程序一般为shell.   P