详解C语言中的getgrgid()函数和getgrnam()函数
C语言getgrgid()函数:从组文件中取得指定gid的数据
头文件:
#include <grp.h> #include <sys/types.h>
定义函数:
strcut group * getgrgid(gid_t gid);
函数说明:getgrgid()用来依参数gid 指定的组识别码逐一搜索组文件, 找到时便将该组的数据以group 结构返回. 返回值:返回 group 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.
范例
/* 取得gid=3 的组数据 */ #include <grp.h> #include <sys/types.h> main() { strcut group *data; int i = 0; data = getgrgid(3); printf("%s:%s:%d:", data->gr_name, data->gr_passwd, data->gr_gid); while(data->gr_mem[i]) printf("%s, ", data->mem[i++]); printf("\n"); }
执行:
sys:x:3:root, bin, adm
C语言getgrnam()函数:从组文件中取得指定组的数据
头文件:
#include <grp.h> #include <sys/types.h>
定义函数:
strcut group * getgrnam(const char * name);
函数说明:getgrnam()用来逐一搜索参数那么指定的组名称, 找到时便将该组的数据以group 结构返回。group结构请参考getgrent()。
返回值:返回 group 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.
范例
/* 取得adm 的组数据 */ #include <grp.h> #include <sys/types.h> main() { strcut group * data; int i = 0; data = getgrnam("adm"); printf("%s:%s:%d:", data->gr_name, data->gr_passwd, data->gr_gid); while(data->gr_mem[i]) printf("%s, ", data->gr_mem[i++]); printf("\n"); }
执行:
adm:x:4:root, adm, daemon
相关推荐
-
在C语言中对utmp文件进行查找和写入操作的函数小结
C语言pututline()函数:将utmp记录写入文件 头文件: #include <utmp.h> 定义函数: void pututline(struct utmp *ut); 函数说明:pututline()用来将参数ut 的utmp 结构记录到utmp 文件中. 此函数会先用getutid()来取得正确的写入位置, 如果没有找到相符的记录则会加入到utmp 文件尾. 附加说明:需要有写入/var/run/utmp 的权限 范例 #include <utmp.h> main(
-
详解C语言中的fopen()函数和fdopen()函数
C语言fopen()函数:打开一个文件并返回文件指针 头文件: #include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, const char * mode); [参数]path为包含了路径的文件名,mode为文件打开方式. mode有以下几种方式: 在POSIX 系统,包含Linux 下都会忽略 b 字符.由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_I
-
简要对比C语言中的dup()函数和dup2()函数
C语言dup()函数:复制文件描述词 头文件: #include <unistd.h> 定义函数: int dup (int oldfd); 函数说明:dup()用来复制参数oldfd 所指的文件描述词, 并将它返回. 此新的文件描述词和参数oldfd 指的是同一个文件, 共享所有的锁定.读写位置和各项权限或旗标. 例如, 当利用lseek()对某个文件描述词作用时, 另一个文件描述词的读写位置也会随着改变. 不过, 文件描述词之间并不共享close-on-exec 旗标. 返回值:当复制成功
-
详解C语言中的getgrgid()函数和getgrnam()函数
C语言getgrgid()函数:从组文件中取得指定gid的数据 头文件: #include <grp.h> #include <sys/types.h> 定义函数: strcut group * getgrgid(gid_t gid); 函数说明:getgrgid()用来依参数gid 指定的组识别码逐一搜索组文件, 找到时便将该组的数据以group 结构返回. 返回值:返回 group 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生. 范例 /* 取得gid=3 的组
-
详解C语言中return返回函数局部变量的问题
目录 return返回栈区局部变量的指针 return返回栈区局部的临时变量 return只读数据段和static数据 在计算机中,释放空间并不需要将空间中的内容全部置成0或者1,而是只要设置这一块空间的数据无效即可.比如在下载文件时需要花很长时间,但是删除文件却只要几秒钟,这是因为操作系统只是把文件标识(文件头链接)删掉了,文件原文还保留着,我们没了文件标识就找不到这个文件了.所以删除后的文件,还可以用特殊的办法被找回来. 这也就意味着,当函数结束调用的时候,函数中的局部变量实际上还是在的,只
-
详解C语言中sizeof如何在自定义函数中正常工作
1.在main函数中,sizeof是可以正常工作的,比如: int main() { int n[5]; printf("input: \n"); int i ; for(i = 0; i < 5; i++) { scanf("%d",n + i); } int len = sizeof(n)/sizeof(n[0]); printf("%d\n",len); return 0; } 2.但是在自定义函数中就不可以了,如下: #includ
-
详解C语言中return与exit的区别
详解C语言中return与exit的区别 1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的.main函数结束时也会隐式地调用exit函数.exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流.关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件.exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值并退出函数 2,return是语言级别的,它
-
详解 Go 语言中 Map 类型和 Slice 类型的传递
Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) { m[1] = 100 m[2] = 200 } 结果是 map[2:200 1:100] 我们再修改如下 m2: func main() { var m map[int]int mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) {
-
详解Golang语言中的interface
interface是一组method签名的组合,interface可以被任意对象实现,一个对象也可以实现多个interface.任意类型都实现了空interface(也就是包含0个method的interface),空interface可以存储任意类型的值.interface定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口. go version go1.12 package main import ( "fmt" ) // 定义struct type Hu
-
详解go语言中type关键词的几种使用
type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef.搞清楚type的使用,就容易理解go语言中的核心概念struct.interface.函数等的使用.以下我用例子代码总结描述,请特别留意代码中的注释. 1.定义结构体 //结构体定义 type person struct { name string //注意后面不能有逗号 age int } func main() { //结构体初始化 p := person{ name: "taozs",
-
详解R语言中的PCA分析与可视化
1. 常用术语 (1)标准化(Scale) 如果不对数据进行scale处理,本身数值大的基因对主成分的贡献会大.如果关注的是变量的相对大小对样品分类的贡献,则应SCALE,以防数值高的变量导入的大方差引入的偏见.但是定标(scale)可能会有一些负面效果,因为定标后变量之间的权重就是变得相同.如果我们的变量中有噪音的话,我们就在无形中把噪音和信息的权重变得相同,但PCA本身无法区分信号和噪音.在这样的情形下,我们就不必做定标. (2)特征值 (eigen value) 特征值与特征向量均为矩阵分
-
详解C++语言中std::array的神奇用法
概述 std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素是直接存放在实例内部,而不是在堆上分配空间:std::array的大小必须在编译期确定:std::array的构造函数.析构函数和赋值操作符都是编译器隐式声明的--这让很多用惯了std::vector这类容器的程序员不习惯,觉得std::array不好用.但实际上,std::array的威力
-
详解go语言中sort如何排序
目录 sort包源码解读 前言 如何使用 基本数据类型切片的排序 自定义Less排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源码解读 前言 我们的代码业务中很多地方需要我们自己进行排序操作,go 标准库中是提供了 sort 包是实现排序功能的,这里来看下生产级别的排序功能是如何实现的. go version go1.16.13 darwin/amd64 如何使用 先来看下 sort 提供的主要功能 对基本数据类型切片的排序
随机推荐
- MariaDB性能调优工具mytop的使用详解
- asp.net 错误:0x8007000B 异常的解决方法
- Python编程实现的简单Web服务器示例
- sql2005 本地计算机上的SQL SERVER服务启动后又停止了解决方法
- Java利用反射如何查找使用指定注解的类详解
- javascript 操作符(~、&、|、^、<<、>>)使用案例
- asp.net 删除MFC单文档默认菜单栏的两种方法
- js 将图片连接转换成base64格式的简单实例
- 浅谈docker Dockerfile 指令 VOLUME 介绍
- JavaEE实现前后台交互的文件上传与下载
- PowerShell DSC组件 xExchange 发布
- jquery实现可拖动DIV自定义保存到数据的实例
- jQuery中的$.ajax()方法应用
- js实现有时间限制消失的图片方法
- 微信API接口大全
- Android编程中EditText限制文字输入的方法
- vue将对象新增的属性添加到检测序列的方法
- angular 用Observable实现异步调用的方法
- java并发之原子操作类和非阻塞算法
- sql 流水号获取代码实例