星空网 > 软件开发 > 操作系统

atexit函数和两种特殊文件权限位

  • atexit函数

atexit函数的原型如下 void atexit(void (*func)(void)) 它是一个参数为返回值和参数均为空的函数指针的函数,含义是当前进程结束之前执行参数函数指针所指向的函数,使用的时候要在main中注册,一次可以注册很多函数,函数的执行顺序与注册的先后有关,关系恰好相反,第一个注册的函数反而是最后一个执行。下面是执行实例。

 

 1 #include<stdio.h> 2 #include<stdlib.h> 3  4  5 void func1() 6 { 7  printf("this is func1\n"); 8 } 9 10 void func4()11 {12  printf("this is func4\n");13 14 }15 16 17 void func3()18 {19  printf("this is func3\n");20 }21 22 23 void func2()24 {25  printf("this is func2\n");26 }27 28 void func0()29 {30  printf("this is func0\n");31 }32 void func6()33 {34  printf("this is func6\n");35 }36 void a()37 {38  printf("this is a\n");39 }40 void z()41 {42  printf("this is z\n");43 }44 45 46 int main()47 {48  atexit(func3);49  atexit(func1);50  atexit(func2);51  52  atexit(func4);53  atexit(func0);54  atexit(func6);55  atexit(a);56  atexit(z);57  return 0;58 }

 

atexit函数和两种特殊文件权限位images/loading.gif' data-original="http://images2015.cnblogs.com/blog/928542/201606/928542-20160620193850569-867962471.png" />

这是执行结果

 

  • uid,euid,suid

使用ps -l命令就可以看见一些信息,PID和PPID就不详细说了分别是该进程和父进程的ID号,这次详细讲的是UID和相关的EUID和SUID,分别代表什么呢

UID:代表实际用户ID,下图中也有显示,当前我是用的是ROOT用户显示的UID就是0,如果是普通用户一般会比0大,我的一般用户UID是1000

EUID:代表有效用户ID,一般uid和euid都是一样的。。。

atexit函数和两种特殊文件权限位

 

SUID:代表设置用户id(只能使用在可执行程序上,因为使用之后权限的x位会变为s),不一样的时候来了!当你设置了该位之后,执行该文件时你的euid会提升到该文件的持有者。使用这一功能的例子有passwd这条命令,按理说只有root有权限更改用户密码,但是普通用户也可以使用passwd更改密码,就是使用了设置用户id。

实现方法如下首先建立一个什么权限都不提供的log文件

atexit函数和两种特殊文件权限位

很显然,访问它是非法的,更不可能往里面写东西,现在我企图用文件指针打开他,往里面写入东西

 1 #include<stdio.h> 2   3  4 #include<string.h> 5  6                                        7 int main() 8  { 9  FILE *fp;10  printf("uid:%d  euid:%d",getuid(),geteuid());11  fp=fopen("log","w");12  if(fp==NULL)13   {14   printf("fopen error");15   }16  char *buffer="hello world";17  18  fwrite(buffer,1,strlen(buffer),fp);19  20  return 0;21 }

使用普通用户执行该程序

atexit函数和两种特殊文件权限位

直接报告段错误,被拒绝了

设置用户id

atexit函数和两种特殊文件权限位

再次执行,成功写入,我们发现这时候打印出来的uid和euid不同,虽然实际用户身份是普通用户,但是当前有效用户身份是root!这样euid的用处就好理解了,只是个身份而已,并不能代表实际人物,就像一个假的名字

atexit函数和两种特殊文件权限位

atexit函数和两种特殊文件权限位

  • 粘滞位(sticky)

文件的粘滞位是什么?有什么作用?

普通文件的粘滞位会**作系统内核无视,目录文件被设置后表示这个目录里面的文件只能被拥有者和root删除,粘滞位出现在可执行的位置上,用t表示,设置了该位之后,用户就不能删除不属于他的目录和文件。

例如tmp目录,就被设置了粘滞位,我在/tmp目录内部创建了子目录文件

atexit函数和两种特殊文件权限位

看!tmp目录文件设置了粘滞位

atexit函数和两种特殊文件权限位

atexit函数和两种特殊文件权限位

创建了一个test普通文件和dirtest目录文件,执行删除

atexit函数和两种特殊文件权限位

请求被拒绝。。。尝试使用-rf强制删除

atexit函数和两种特殊文件权限位

同样被拒绝,设置粘滞位的命令

chmod 777 dirtestchmod +t dirtest

这个也可以

chmod 1777 dirtest

对普通文件设置粘滞位并没有什么卵用,变成T了,最后被无视

atexit函数和两种特殊文件权限位




原标题:atexit函数和两种特殊文件权限位

关键词:函数

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

政府立法!要求亚马逊公开A9算法!:https://www.ikjzd.com/articles/109949
那些月入5W的亚马逊卖家,他们的图片是怎样?:https://www.ikjzd.com/articles/109950
可怕!200位卖家侵权被告,这个中国卖家火了...:https://www.ikjzd.com/articles/109951
想要提高销量,亚马逊推出了Small Business Academy来帮你!:https://www.ikjzd.com/articles/109952
亚马逊如何巧妙的利用促销折扣?:https://www.ikjzd.com/articles/109953
一年仅一次!跨境卖家“双11”购物,这里没有套路:https://www.ikjzd.com/articles/109954
跨境支付百科——巴西支付篇:https://www.kjdsnews.com/a/1836648.html
大福地快捷酒店预订 大福酒店怎么走:https://www.vstour.cn/a/365187.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流