• atexit函数

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

 #include<stdio.h>
#include<stdlib.h> void func1()
{
printf("this is func1\n");
} void func4()
{
printf("this is func4\n"); } void func3()
{
printf("this is func3\n");
} void func2()
{
printf("this is func2\n");
} void func0()
{
printf("this is func0\n");
}
void func6()
{
printf("this is func6\n");
}
void a()
{
printf("this is a\n");
}
void z()
{
printf("this is z\n");
} int main()
{
atexit(func3);
atexit(func1);
atexit(func2); atexit(func4);
atexit(func0);
atexit(func6);
atexit(a);
atexit(z);
return ;
}

这是执行结果

  • uid,euid,suid

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

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

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

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

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

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

  #include<stdio.h>

  #include<string.h>

  int main()
{
FILE *fp;
printf("uid:%d euid:%d",getuid(),geteuid());
fp=fopen("log","w");
if(fp==NULL)
{
printf("fopen error");
}
char *buffer="hello world"; fwrite(buffer,,strlen(buffer),fp); return ;
}

使用普通用户执行该程序

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

设置用户id

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

  • 粘滞位(sticky)

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

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

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

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

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

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

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

chmod  dirtest
chmod +t dirtest

这个也可以

chmod  dirtest

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

atexit函数和两种特殊文件权限位的更多相关文章

  1. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  2. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

  3. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

  4. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  5. Git 的两种忽略文件方式 gitignore 和 exclude

    Git 的两种忽略文件方式 gitignore 和 exclude .gitignore 不用说了,大家都知道. 有一个 exclude 可能接触比较少. 知道这个功能后发现,用在服务器上非常方便,因 ...

  6. strcmp函数的两种实现

    strcmp函数的两种实现,gcc测试通过. 一种实现: C代码   #include<stdio.h> int strcmp(const char *str1,const char *s ...

  7. DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接 ...

  8. dll导出函数的两种方式的比较

    最初的网页链接已经挂了, 在此贴一个中间的转载链接 https://blog.csdn.net/zhazhiqiang/article/details/51577523 一 概要 vs中导出 dll的 ...

  9. DLL声明导出函数的两种方式

    DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport):另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出.属 ...

随机推荐

  1. 一张图教你搞定Mac App Store 应用安装包存储路径

    还在为找不到App Store 更新应用的安装文件发愁吗?是否有过多个人同时需要更新Xcode,都自己下载一次的痛苦经历? 大家都知道通过苹果服务器下载东西,确实难耐!AppStore 甚至都经常提示 ...

  2. PHP For Windows/php-5.6.11-Win32-VC11-x64启动脚本

    启动php-cgi.bat @echo off E: cd E:\php-5.6.11-Win32-VC11-x64 php-cgi.exe -b 127.0.0.1:9000 -c php.ini- ...

  3. C++设计模式-Builder建造者模式

    作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:B ...

  4. 2008server安装Intel I217V网卡驱动

    问题:由于在职的是小公司,公司服务器都是DIY的,拒绝采购品牌服务器,所以配件都是自己DIY的,这样就会出现很多兼容性问题,例如服务器主板是AUS B85-PRO-Gamer,装的是服务器系统wind ...

  5. Angular $http解析通过接口获得的json数据

    刚接触angular不久,对很多东西都不了解,今天需要用angular通过接口得到json数据,折腾了好久,总算是能获取到数据了,下面是部分源码,仅供参考: HTML部分: <body ng-a ...

  6. C++中关于string类型究竟能不能用cout输出的问题

    先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...

  7. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  8. 设置表格td宽度

      CSS布局,表格宽度不听使唤的实例.想把表格第一例宽度设为20,其他自适应.但CSS中宽度是等宽的.只设这一行也不起作用.但是在实际应用中总是等宽处理,并不按照样式来走. XML/HTML代码 & ...

  9. css部分的复习

    常见的块元素有<h1><h6>.<p><div><ul><li><ol>等,其中<div>标记是最典型的 ...

  10. Maven-3.2.2安装配置

    (1)安装JDK,这里是1.7.0_51 (2)Maven-3.2.2下载地址:http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.2/binaries/ ...