分享
 
 
 

linux 下C函数部分(8)

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

initgroups(初始化组清单)

相关函数

setgrent,endgrent

表头文件

#include<grp.h>

#include<sys/types.h>

定义函数

int initgroups(const char *user,gid_t group);

函数说明

initgroups()用来从组文件(/etc/group)中读取一项组数据,若该组数据的成员中有参数user时,便将参数group组识别码加入到此数据中。

返回值

执行成功则返回0,失败则返回-1,错误码存于errno。

pututline(将utmp 记录写入文件)

相关函数

getutent,getutid,getutline

表头文件

#include<utmp.h>

定义函数

void pututline(struct utmp *ut);

函数说明

pututline()用来将参数ut的utmp结构记录到utmp文件中。此函数会先用getutid()来取得正确的写入位置,如果没有找到相符的记录则会加入到utmp文件尾,utmp结构请参考getutent()。

返回值

附加说明

需要有写入/var/run/utmp 的权限

范例

#include<utmp.h>

main()

{

struct utmp ut;

ut.ut_type =USER_PROCESS;

ut.ut_pid=getpid();

strcpy(ut.ut_user,”kids”);

strcpy(ut.ut_line,”pts/1”);

strcpy(ut.ut_host,”www.gnu.org”);

pututline(&ut);

}

执行

/*执行范例后用指令who -l 观察*/

root pts/0 dec9 19:20

kids pts/1 dec12 10:31(www.gnu.org)

root pts/2 dec12 13:33

seteuid(设置有效的用户识别码)

相关函数

setuid,setreuid,setfsuid

表头文件

#include<unistd.h>

定义函数

int seteuid(uid_t euid);

函数说明

seteuid()用来重新设置执行目前进程的有效用户识别码。在Linux下,seteuid(euid)相当于setreuid(-1,euid)。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno

附加说明

请参考setuid

setfsgid(设置文件系统的组识别码)

相关函数

setuid,setreuid,seteuid,setfsuid

表头文件

#include<unistd.h>

定义函数

int setfsgid(uid_t fsgid);

函数说明

setfsgid()用来重新设置目前进程的文件系统的组识别码。一般情况下,文件系统的组识别码(fsgid)与有效的组识别码(egid)是相同的。如果是超级用户调用此函数,参数fsgid 可以为任何值,否则参数fsgid必须为real/effective/saved的组识别码之一。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno。

附加说明

此函数为Linux特有。

错误代码

EPERM 权限不够,无法完成设置。

setfsuid(设置文件系统的用户识别码)

相关函数

setuid,setreuid,seteuid,setfsgid

表头文件

#include<unistd.h>

定义函数

int setfsuid(uid_t fsuid);

函数说明

setfsuid()用来重新设置目前进程的文件系统的用户识别码。一般情况下,文件系统的用户识别码(fsuid)与有效的用户识别码(euid)是相同的。如果是超级用户调用此函数,参数fsuid可以为任何值,否则参数fsuid必须为real/effective/saved的用户识别码之一。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno

附加说明

此函数为Linux特有

错误代码

EPERM 权限不够,无法完成设置。

setgid(设置真实的组识别码)

相关函数

getgid,setregid,getegid,setegid

表头文件

#include<unistd.h>

定义函数

int setgid(gid_t gid);

函数说明

setgid()用来将目前进程的真实组识别码(real gid)设成参数gid值。如果是以超级用户身份执行此调用,则real、effective与savedgid都会设成参数gid。

返回值

设置成功则返回0,失败则返回-1,错误代码存于errno中。

错误代码

EPERM 并非以超级用户身份调用,而且参数gid 并非进程的effective gid或saved gid值之一。

setgrent(从头读取组文件中的组数据)

相关函数

getgrent,endgrent

表头文件

#include<grp.h>

#include<sys/types.h>

定义函数

void setgrent(void);

函数说明

setgrent()用来将getgrent()的读写地址指回组文件开头。

返回值

附加说明

请参考setpwent()。

setgroups(设置组代码)

相关函数

initgroups,getgroup,getgid,setgid

表头文件

#include<grp.h>

定义函数

int setgroups(size_t size,const gid_t * list);

函数说明

setgroups()用来将list 数组中所标明的组加入到目前进程的组设置中。参数size为list()的gid_t数目,最大值为NGROUP(32)。

返回值

设置成功则返回0,如有错误则返回-1。

错误代码

EFAULT 参数list数组地址不合法。

EPERM 权限不足,必须是root权限

EINVAL 参数size值大于NGROUP(32)。

setpwent(从头读取密码文件中的账号数据)

相关函数

getpwent,endpwent

表头文件

#include<pwd.h>

#include<sys/types.h>

定义函数

void setpwent(void);

函数说明

setpwent()用来将getpwent()的读写地址指回密码文件开头。

返回值

范例

#include<pwd.h>

#include<sys/types.h>

main()

{

struct passwd *user;

int i;

for(i=0;i<4;i++){

user=getpwent();

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);

}

setpwent();

user=getpwent();

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

root:0:0:root:/root:/bin/bash

setregid(设置真实及有效的组识别码)

相关函数

setgid,setegid,setfsgid

表头文件

#include<unistd.h>

定义函数

int setregid(gid_t rgid,gid_t egid);

函数说明

setregid()用来将参数rgid设为目前进程的真实组识别码,将参数egid设置为目前进程的有效组识别码。如果参数rgid或egid值为-1,则对应的识别码不会改变。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno。

setreuid(设置真实及有效的用户识别码)

相关函数

setuid,seteuid,setfsuid

表头文件

#include<unistd.h>

定义函数

int setreuid(uid_t ruid,uid_t euid);

函数说明

setreuid()用来将参数ruid 设为目前进程的真实用户识别码,将参数euid 设置为目前进程的有效用户识别码。如果参数ruid 或euid值为-1,则对应的识别码不会改变。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno。

附加说明

请参考setuid()。

setuid(设置真实的用户识别码)

相关函数

getuid,setreuid,seteuid,setfsuid

表头文件

#include<unistd.h>

定义函数

int setuid(uid_t uid)

函数说明

setuid()用来重新设置执行目前进程的用户识别码。不过,要让此函数有作用,其有效的用户识别码必须为0(root)。在Linux下,当root使用setuid()来变换成其他用户识别码时,root权限会被抛弃,完全转换成该用户身份,也就是说,该进程往后将不再具有可setuid()的权利,如果只是向暂时抛弃root 权限,稍后想重新取回权限,则必须使用seteuid()。

返回值

执行成功则返回0,失败则返回-1,错误代码存于errno。

附加说明

一般在编写具setuid root的程序时,为减少此类程序带来的系统安全风险,在使用完root权限后建议马上执行setuid(getuid());来抛弃root权限。此外,进程uid和euid不一致时Linux系统将不会产生core dump。

setutent(从头读取utmp 文件中的登录数据)

相关函数

getutent,endutent

表头文件

#include<utmp.h>

定义函数

void setutent(void);

函数说明

setutent()用来将getutent()的读写地址指回utmp文件开头。

附加说明

请参考setpwent()或setgrent()。

utmpname(设置utmp 文件路径)

相关函数

getutent,getutid,getutline,setutent,endutent,pututline

表头文件

#include<utmp.h>

定义函数

void utmpname(const char * file);

函数说明

utmpname()用来设置utmp文件的路径,以提供utmp相关函数的存取路径。如果没有使用utmpname()则默认utmp文件路径为/var/run/utmp。

返回值

crypt(将密码或数据编码)

相关函数

getpass

表头文件

#define _XOPEN_SOURCE

#include<unistd.h>

定义函数

char * crypt (const char *key,const char * salt);

函数说明

crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z、A-Z、0-9,“.”和“/”所组成,用来决定使用4096 种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key 所指的字符串不会有所更动。编码过的字符串长度为13 个字符,前两个字符为参数salt代表的字符串。

返回值

返回一个指向以NULL结尾的密码字符串。

附加说明

使用GCC编译时需加-lcrypt。

范例

#include<unistd.h>

main()

{

char passwd[13];

char *key;

char slat[2];

key= getpass(“Input First Password:”);

slat[0]=key[0];

slat[1]=key[1];

strcpy(passwd,crypt(key slat));

key=getpass(“Input Second Password:”);

slat[0]=passwd[0];

slat[1]=passwd[1];

printf(“After crypt(),1st passwd :%s\n”,passwd);

printf(“After crypt(),2nd passwd:%s \n”,crypt(key slat));

}

执行

Input First Password: /* 输入test,编码后存于passwd[ ] */

Input Second Password /*输入test,密码相同编码后也会相同*/

After crypt () 1st Passwd : teH0wLIpW0gyQ

After crypt () 2nd Passwd : teH0wLIpW0gyQ

bsearch(二元搜索)

相关函数

qsort

表头文件

#include<stdlib.h>

定义函数

void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*));

函数说明

bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。

附加说明

找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。

第一頁    上一頁    第8頁/共20頁    下一頁    最後頁
第01頁 第02頁 第03頁 第04頁 第05頁 第06頁 第07頁 第08頁 第09頁 第10頁 
第11頁 第12頁 第13頁 第14頁 第15頁 第16頁 第17頁 第18頁 第19頁 第20頁 
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有