Linux系统编程27 系统数据文件和信息 - /etc/passwd 用户信息文件和函数 getpwuid() getpwnam()

《Linux系统调用:getpwnam,getpwuid》 一、介绍 getpwnam() 和 getpwuid() 的作用是从密码文件(/etc/passwd)中获取记录。 #include <sys/types.h> #include <pwd.h> struct passwd *getpwnam(const char *name); 参数: name: 用户登入名 返回值: 返回一个 struct passw... 阅读详情
一 、/etc/passwd

我们发现
ls -l 显示线程的 user名 和 group名
ls -n 显示线程的 user id 和 group id

mhr@ubuntu:~$ ls -l
total 52
drwxr-xr-x 3 mhr mhr 4096 Sep  2  2019 Desktop
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Documents
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Downloads
-rw-r--r-- 1 mhr mhr 8980 Sep  2  2019 examples.desktop
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Music
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Pictures
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Public
drwxrwxr-x 2 mhr mhr 4096 Nov  9  2019 shiyan
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Templates
drwxr-xr-x 2 mhr mhr 4096 Sep  2  2019 Videos
drwxrwxr-x 8 mhr mhr 4096 Apr 16 08:17 work
mhr@ubuntu:~$ 
mhr@ubuntu:~$ 
mhr@ubuntu:~$ ls -n
total 52
drwxr-xr-x 3 1000 1000 4096 Sep  2  2019 Desktop
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Documents
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Downloads
-rw-r--r-- 1 1000 1000 8980 Sep  2  2019 examples.desktop
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Music
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Pictures
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Public
drwxrwxr-x 2 1000 1000 4096 Nov  9  2019 shiyan
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Templates
drwxr-xr-x 2 1000 1000 4096 Sep  2  2019 Videos
drwxrwxr-x 8 1000 1000 4096 Apr 16 08:17 work
mhr@ubuntu:~$ 

但我们自己实现 ls 系列命令的时候,需要使用 user名 和 group名,user id 和 group id 等信息,那这些信息存储在什么位置呢? 在 linux,unix系统中 这些信息存储在 /etc/passwd 中而在 FreeBSD系统上,这些信息存储在一个数据库中。在HPUnix系统中,这些信息存储在文件系统中。

在这里插入图片描述

mhr❌1000:1000:MHR,:/home/mhr:/bin/bash,
所以在 unix,linux 系统中 可以查找 /etc/passwd文件中的对应用户名或di 等信息。

在这里插入图片描述

那么各个系统 存储 上述信息的位置不一样,用户使用就比较麻烦,所以就有了标准,标准就出来和稀泥了~
标准说:既然你们对这些信息的存储的实现都不一样,那么我就统一一下标准实现吧。

getpwuid()
getpwnam()

NAME
getpwnam, getpwnam_r, getpwuid, getpwuid_r - get password file entry
通过 uid 或者 user name 来查询用户信息。
SYNOPSIS
#include <sys/types.h>
#include <pwd.h>

struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);

   The passwd structure is defined in <pwd.h> as follows:

       struct passwd {
           char   *pw_name;       /* username */
           char   *pw_passwd;     /* user password */
           uid_t   pw_uid;        /* user ID */
           gid_t   pw_gid;        /* group ID */
           char   *pw_gecos;      /* user information */
           char   *pw_dir;        /* home directory */
           char   *pw_shell;      /* shell program */
       };

注意不同系统的 passed 中的字段可能不一样,具体需要看手册!

实验1 :使用 getpwuid() 获取 passwd相关信息

#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <pwd.h>

int main(int argc,char *argv[])
{
	struct passwd *pwdline;
	if(argc < 2)
	{
		fprintf(stderr,"Usage:%s <src_file> <dest_file>\n",argv[0]);
		exit(1);
	}

	//atoi() : string --> int 转换
	pwdline = getpwuid(atoi(argv[1]));

	//puts string  打印用户名,打印字符换 直接而用 puts()
	puts(pwdline->pw_name);

	exit(0);
}


mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ gcc getpwuid.c 
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ 
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ ./a.out 1000
mhr //我自己
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ 
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ 
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ ./a.out 0
root // uid 为0  是 root 用户
mhr@ubuntu:~/work/linux/muluheyonghucaozuo/27$ 
C语言编程中从密码文件获取数据的函数总结 主要介绍了C语言编程中从密码文件获取数据的函数总结,包括getpw()函数和getpwnam()函数以及getpwuid()函数,需要的朋友可以参考下 立即下载

相关推荐

保姆级教程:在RK3588 Android12设备树(DTS)中配置MIPI 8 Lane双通道与DSC显示

本文详细介绍了在RK3588 Android12平台上配置MIPI 8 Lane双通道与DSC显示的实战指南。通过设备树(DTS)参数详解、DSC参数计算与PPS配置、双通道同步机制实现等内容,帮助开发者高效完成高分辨率屏幕驱动配置,解决嵌入式显示系统开发中的常见挑战。

weixin_30905133的博客 399

【库函数】linux之getuid和getpwuid函数

1、getuid和getpwuid函数简介       (一)        (1)头文件                    #include                   #include         (2)函数原型                   uid_t getuid(void);        (3)说明                uid_t是定义在

ostar_liang的专栏 6913

Win11安装Office2021

windows11安装office2021。

1万+

C++ 获取当前用户的家目录

根据传入的用户 id,在系统记录 password 的文件(如:/etc/passwd)中查找相关用户信息,存入准备好的 buffer 数组中。成功后,result 指向存储数据的缓冲,passwd 结构中的指针变量指向缓冲(如 pw_name 等值存放在 buffer 数组中),整形变量直接存储相关信息。可以通过在获取用户信息成功后,清空 buffer ,并在清空 buffer 前后打印 passwd 变量和 result 的值,来判断 buffer 中存放的值。先获取所需缓冲区的大小,并声明缓冲区。

阿渌的博客札记 1489

abaqus 根据坐标施加载荷- Analytical Field 载荷映射

在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce.

shengyutou的博客 2万+

车载与安防项目实战:如何用RK3588搭配NVP6158C实现4路AHD摄像头BT1120接入与同步预览

本文详细解析了基于RK3588处理器与NVP6158C解码芯片实现4路AHD摄像头BT1120接入与同步预览的技术方案。针对车载环视和安防监控场景,重点探讨了硬件架构设计、BT1120接口配置、多路同步机制及Android HAL适配等核心问题,提供了从底层驱动到上层应用的完整实现路径,为相关领域的工程实践提供可靠参考。

weixin_30571465的博客 486

( standard c libraries translation )getpwnam

getpwnam, getpwnam_r, getpwuid, getpwuid_r - get password file entry getpwnam, getpwnam_r, getpwuid, getpwuid_r - 获取password文件的入口 所需头文件 #include #include struct passwd *getpwnam(const char

1301

【零基础教程】HEC-RAS 1D/2D全流程模拟指南|从水动力到水质建模一次搞定!

HEC-RAS由美国陆军工程兵团水文研究中心研制,具有完整的一二维耦合的水动力及水环境模拟功能,也具有闸、涵洞、桥梁以及泵站等水利构筑物的模拟能力;同时也可以与HEC研制的水文模型(HMS)、洪水淹没风险和损失分析软件(FDA)等耦合,是免费软件中使用最方便、应用最广泛的软件之一。2.HEC-RAS与HEC-HMS的耦合(不详细讲HEC-HMS)3.淹没风险分析软件HEC-FDA与HEC-RAS耦合。案例十八:HEC-RAS与HEC-HMS的耦合。案例十九:HEC-RAS与HEC-FDA的耦合。

weixin_48230888的博客 872

Linux下获取用户名getuid,geteuid,getpwnam,getpwuid,getpwnam_r,getpwuid_r

在Linux编程中,有时需要我们获取用户的信息,包括用户名,用户Id,用户目录等信息,本篇记录获取用户名相关信息的函数的使用getuid(), geteuid(), getpwnam(), getpwuid(), getpwnam_r(), getpwuid_r()。

chenyijun的专栏 9028

扩散模型在工业缺陷检测中的应用与优化

扩散模型作为生成式AI的重要分支,通过逐步去噪的逆向过程实现高质量数据生成。其核心U-Net架构结合残差连接和时间步嵌入,特别适合处理工业场景中的细微缺陷检测。在计算机视觉领域,这种技术突破了传统深度学习模型对小样本数据的限制,通过域自适应预训练和小样本微调两阶段框架,显著提升金属表面、纺织品等复杂场景的检测准确率。关键技术实现涉及噪声调度优化、多任务损失设计等工程实践,最终在MVTec AD等工业数据集上达到90%以上的检测精度,为智能制造提供可靠的自动化质检方案。

weixin_30512043的博客 497

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 191

关于getpw系列函数返回的静态区域

  首先说一下什么是getpw系列函数,它主要是指这些函数:      这些函数根据一个用户名(getpwnam和getpwnam_r两个函数)或者一个用户ID(getpwuid和getpwuid_r)来获取这个用户在/etc/passwd中相应的条目信息,并把这些信息存放在一个struct passwd的结构体里面,然后再把这个结构体的指针返回。问题就出在这个存储用户信息的结构体上面,它是由...

weixin_30407099的博客 252

基于STM32L4XX、HAL库的MCP4561数字电位器驱动程序设计

/ HAL库需要左移一位。* @param address: 设备地址(0x2C-0x2F)* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hmcp: MCP4561句柄。* @param hi2c: I2C句柄。

zhusl6688的博客 340

《Linux/Unix系统编程手册》读书笔记5

《Linux/Unix系统编程手册》读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/group。 每个用户都有唯一的用户名和相关的用户标识符(UID)。用户可以属于一个或多个组,每个组都有唯一的组名和相关的组标识符(GID)。 用户和组的用途为:1、可以确定各种系统资源的所有权;2、对赋予...

weixin_30932215的博客 164

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Unix/Linux编程:查看/etc/passwd、/etc/group、/etc/shadow

理论 Unix系统的正常运行需要使用大量与系统有关的数据文件,例如:口令文件/etc/passwd以及组文件/etc/group就是经常被多个程序频繁使用的两个文件。用户每次登陆Unix系统,以及每次实现ls -l命令时都需要使用口令文件 Unxi系统口令文件包含了如下所示各字符,这些字段包含在<pwd.h>定义的passwd结构中 Unix的口令文件是/etc/passwd,而且是一个ASCII文件(:分隔) 下面可以通过用户登录名或者uid查询相关项目 #include <pw

OceanStar的博客 3363

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

编译node-v4.2.1,出现错误:undefined reference to getpwuid_r

error: undefined reference to 'getpwuid_r' 我的解决方法(使用getpwuid替换getpwuid_r): [root@localhost node-v4.2.1]# grep getpwuid_r -R . [root@localhost node-v4.2.1]# gedit ./deps/uv/src/unix/core.c 将    

张同光 (Tongguang Zhang):Hello everyone ! 2285

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《unix环境高级编程》 读书笔记 (4)

近来读书,做些笔记,来年好翻翻。 本文所使用的操作系统为 CentOS7.0,如果不想装双系统的可以装虚拟机,可以参考这里: http://blog.youkuaiyun.com/alex_my/article/details/38142229 system data files and infomation 1 password file 终

alex_my 3339

android ndk 找不到 getpwuid_r

需要android-21, 之前的版本有getpwuid

iteye_11596的博客 478

getpwuid()函数,getpgrgid()函数()

1.getpwuid()函数 通过用户uid查找用户的相关信息,并以passwd的结构体返回其数据. 头文件:#include     #include 函数原型:struct  passwd *getpwuid(uid_t  uid); 参数       文件所有者的uid; 返回值:成功passwd 结构体,uid所对应的用户信息,错误返回空指针, struct passwd { ch

杨龙飞的博客 5294

NSS环境下getpwnam_r总是返回NULL的问题(busybox的login.c)

用了6个小时解决这个问题. 下面是busybox的login.c的code: pw = NULL; getpwnam_r(username, &pwdstruct, pwdbuf, sizeof(pwdbuf), &pw); if (!pw) goto auth_failed; getpwnam_r()总是返回NULL, 换成getpwnam()也是一样的。 但是自己类似busy...

fanrey123的博客 1245

LINUX的passwd文件和命令

通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户账号对应于该文件中的一行记录。这行记录定义了每个用户账号的属性。下面是一个passwd文件的示例(部分摘录):     root:x:0:0:root:/root:/bin/bash     bin:x:1:1:bin:/bin:/sbin/nologin     daemon:x:2:2:

harryxlb的专栏 724

LINUX操作的基本命令(二)

一、实验目的 熟悉掌握Linux基本命令,熟悉VI编辑器的使用方法,练习Linux环境下的用户、分组管理,熟悉掌握Shell脚本编程。 二、实验原理 Linux编程环境及开发工具。利用vi编辑器编写c语言程序源代码。利用gcc编译器便宜写好的源代码文件,生成可执行文件。运行可执行文件,测试程序。利用GDB调试工具,调试程序。 三、实验步骤、数据记录及处理 1.用C语言编程,打开/etc/passwd文件,找出已经注册的普通用户账号。 #include <time.h> #include <

weixin_44057997的博客 1928

linux xguest用户,在/etc/passwd中得到普通用户列表

/etc/passwd文件用来保存系统中当前所有的用户信息,该文件对所有用户都可见。在该文件中,每行信息代表一个用户。每个用户的信息由7部分组成:用户名:加密后的用户密码:用户ID(UID):用户所在组ID(GID):用户全名以及用户信息:用户主目录:该用户登录时所用的命令解释器在该文件中,有些用户并不是用户建立的,而是系统帐号。比如在上述passwd文件中,sys、bin等用户就是系统所保留的用...

weixin_31621945的博客 836

c语言 linux用户信息,Linux用户管理

在Linux中,有三种用户:Root 用户:也称为超级用户,对系统拥有完全的控制权限。超级用户可以不受限制的运行任何命令。Root 用户可以看做是系统管理员。系统用户:系统用户是Linux运行某些程序所必须的用户,例如 mail 用户、sshd 用户等。系统用户通常为系统功能所必须的,不建议修改这些用户。普通用户:一般用户都是普通用户,这些用户对系统文件的访问受限,不能执行全部Linux命令。Li...

weixin_36084130的博客 442

C语言实现/etc/passwd的逐行显示并打印行号和用户名

#include #include int main() { FILE *fp; char *str; int sum=0,i=0,j=0; char a[20]={'\0'}; fp=fopen("/etc/passwd","rb"); if(fp==NULL) { perror("read the passwd file error"); exit(1)

wuweiweinanjing的专栏 3127

[linux-10]用户和组管理

一、介绍 Linux系统是一个多用户多任务的操作系统 ,任何一个要使用系统资源的用户,都必须首先向系统管理员root申请一个账号,然后以这个账号的身份进入系统 二、添加用户 命令:useradd 用户名 创建用户成功后,会自动创建和用户同名的家目录 或者通过 useradd -d 指定家目录 新用户名,给新创建的用户指定家目录 三、修改密码 命令:passwd 用户名 tips:一定要写用户名,不然默认是给当前用户修改密码 pwd:显示当前用户在那个目录下 四、删除用户 1.命令:userde

sinat_41739591的博客 582
上一篇: Linux系统编程26 目录和用户操作 - 实现自己的du命令
下一篇: Linux系统编程28 系统数据文件和信息 - /etc/group 用户信息文件和函数 getgrgid()
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值