• 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. Newtonsoft.Json(Json.net)的基本用法

    Newtonsoft.Json(Json.net)的基本用法 其它资料 JSON详解 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: pub ...

  2. 数据库 MySql(二)

    MySQL(二) 1.外键及连表 外键 一个特殊的索引,只能是指定内容 CREATE TABLE part1 ( nid INT NOT NULL auto_increment PRIMARY KEY ...

  3. 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)

    问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ...

  4. uploadify图片上传发生Security Error

    今天在使用uploadify进行图片上传的时候出现security error.其根本原因是flash跨域问题.主要原因是因为配了两个域名www.ttyouni.com 和 ttyouni.com 在 ...

  5. ArcGIS Viewer for Flex中引入google map作底图

    在ArcGIS Viewer for Flex开发中,经常需要用到google map作为底图,我们不能通过ArcGIS Viewer for Flex - Application Builder轻易 ...

  6. IMX6 PCA9698应用层读写库

    .c #include <stdio.h> #include <string.h> #include <linux/types.h> #include <st ...

  7. display:inline-block左右元素上下不对齐

    今天做了两个inline-block元素,出现左右两个元素顶端出现上下不对齐的情况(下图): 解决办法: 把应用 inline-block的元素加上 vertical-align: top; .CSS ...

  8. angular背景图片问题

    如果背景图片是从后台取得的数据,可以按下面的方式使用: ng-style="{'background':'url(http://xxx/{{item.id}})'}" 还需要加上  ...

  9. 碎片事物的提交 commitAllowingStateLoss()

    转:http://blog.csdn.net/kaiqiangzhang001/article/details/42241441 下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题, ...

  10. 【浅析】IMU代码

    IMU的代码的引自https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/imumargalgo ...