广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

UNIX中添加组ID

  • 时间:2017-01-10
  • 发布:广州C++培训
  • 来源:达内新闻

广州达内C++培训的小编在UNIX中,对组的使用已经做了一些修改。在V7中一个用户任何时候只能属于一个组,当用户登录时,系统就按照口令文件中用户相关联的组ID赋给他实际组ID。可以在任何时候执行netgrp更改组。如果newgrp命令执行成功则实际组更改为新的组,它将用于后续文件权限检查。执行不带任何权限的newgrp则可返回到原来的组。

这种组的成员关系一直持续到1983年左右,此时4.2BSD引入了添加组ID的概念,我们不仅可以属于口令记录中组ID所对应的组,还可以属于多至16个另外的组。文件权限检查并修改为:不仅将进程的有效组ID与文件的zuID比较,而且也将所有添加组ID与文件的组ID比较

使用添加组ID的一个优势就是不用显式的修改用户组ID。

为了存取和设置添加组ID,通常使用以下三个函数:

```

#include <sys/types.h>

#include

int getgroups(int gidsetsize, gid_t grouplist[]);

返回值:成功则为添加的组数量,出错为-1.

int setgroups(int ngroups, const gid_t grouplist[]);

int initgroups(const char *username, gid_t basegid);

两个函数返回值:成功0,出错-1.

```

getgroups将进程所属用户的各添加组填到数组grouplist中,填入该数组的ID数最多gidsetsize。实际填入的数量由该函数返回。如果系统常数NGROUPS_MAX为0,则返回0,这并不表示错误。

setgroups可由root用户调用为调用进程设置添加组ID表,grouplist是组ID数组,ngroups是数组元素数。

通常只有initgroups调用setgroups,initgroups读整个组文件然后对username确定其组的成员关系。然后它调用setgroups为该用户初始化添加组ID表。因为initgroups调用setgroups,所以只有root用户才能调用initgroups,除了在组文件中找username是成员的组,initgroups也在添加组ID表中包括了basegid。basegid是username在口令文件中的组ID。

上一篇:Git分布式版本控制
下一篇:UNIX系统的登录会计

广州达内C++培训老师教你学习单片机C语言

2017下半年刷手机乘地铁一波来袭!【广州达内】

高频传输每秒 50GB,够劲!【达内c++培训】

程序员培训哪里好?达内让你一分钟搞定编程接口回调

选择城市和中心
贵州省

广西省

海南省