红联Linux门户
Linux帮助

关于atexit,Linux中的t权限,Linux中的FILE结构体

发布时间:2017-02-21 17:43:55来源:linux网站作者:SMQsmq
一、关于atexit函数
atexit函数包含在头文件:#include<stdlib.h>中 ,功能: 注册终止函数(即main执行结束后调用的函数) ,用法: int atexit(void (*func)(void)),atexit()函数来注册程序正常终止时要被调用的函数,在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。
如下所示:
关于atexit,Linux中的t权限,Linux中的FILE结构体
关于atexit,Linux中的t权限,Linux中的FILE结构体
关于atexit,Linux中的t权限,Linux中的FILE结构体
由上述例子可知,最后注册的fun3()函数先结束调用,而最先注册的fun1()函数最后结束调用,所以印证了atexit注册的函数顺序与调用顺序相反。由于atexit是在进程退出时调用函数的,所以main函数里的printf先输出了 fun has finished。
 
二、Linux中的t权限
t:Sticky Bit,简称为SBIT权限,只针对目录有效。
t :设置粘着位,一个文件可读写的用户并一定想让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。
当用户对此目录具有 w, x 权限,亦具有写入的权限时当用户在该目录下创建文件或目录时,仅有自己与 root用户才有权限删除该文件或目录。
如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。
由此可见,在t目录下创建了一个file文件,给它加了T权限后,该file文件即使具有w权限也还是不能够被删除。
 
三、Linux中的FILE结构的成员
struct file结构体其原型是:
struct file {
/*
* fu_list becomes invalid after file_free is called and queued via
* fu_rcuhead for RCU freeing
*/
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;
atomic_t                f_count;
unsigned int            f_flags;
mode_t                  f_mode;
loff_t                  f_pos;
struct fown_struct      f_owner;
unsigned int            f_uid, f_gid;
struct file_ra_state    f_ra;
unsigned long           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;
};
文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的struct file。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28573.html