atexit函数的调用
函数名: atexit
头文件:#include<stdlib.h>
功 能: 注册终止函数(即main执行结束后调用的函数)
exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。为了验证我们来注册三个函数,看看输出结果:
运行结果:
结果分析,我们在调用的时候先调用的是funtest1(),然而我们从打印解过来看,他是最后被执行的,所以这就验证了我们上面说的。exit调用这些注册函数的顺序与它们 登记时候的顺序相反。
粘制位问题:
一般来说只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。然后,在我的电脑上我们来看一下
我们可以看到在other的权限中出现了粘着位,而粘制位也是针对other的,我们会用chomd来给other加减权限,而这里我们也是可以用它来设置粘制位的。
这样就加上了。而一旦为某个文件设置了粘制位,在别人要删的时候就会提醒权限不够。而我们自己的tmp也是不可以修改other的粘制位的
3.strcut file---文件结构体
文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct
file。
原型如下:
struct
file {
union {
struct list_head fu_list;
struct rcu_head fu_rcuhead;
} f_u;
struct path f_path;
#define f_dentry f_path.dentry //该成员是对应的 目录结构 。
#define f_vfsmnt f_path.mnt
const struct file_operations *f_op; //该操作 是定义文件关联的操作的。内核在执行open时对这个 指针赋值。
unsigned int f_flags; //该成员是文件标志。
mode_t f_mode;
struct fown_struct f_owner;
unsigned int f_uid, f_gid;
struct file_ra_state f_ra;
u64 f_version;
#ifdef CONFIG_SECURITY
void *f_security;
#endif
/* needed for tty driver, and maybe others */
void *private_data;//该成员是系统调用时保存状态信息非常有用的资源。
#ifdef CONFIG_EPOLL
/* Used by fs/eventpoll.c to link all the hooks to this file */
struct list_head f_ep_links;
spinlock_t f_ep_lock;
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_mapping;
#ifdef CONFIG_DEBUG_WRITECOUNT
unsigned long f_mnt_write_state;
#endif
};