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

来源:互联网 发布:maya破解软件下载 编辑:程序博客网 时间:2024/05/17 03:05

关于“atexit函数”,“Linux中的t权限”,“Linux中的FILE结构体”的介绍

一、关于atexit函数

        atexit函数包含在头文件:#include<stdlib.h>中 ,功 能: 注册终止函数(即main执行结束后调用的函数) ,用 法: int atexit(void (*func)(void)),atexit()函数来注册程序正常终止时要被调用的函数,在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。

如下所示:










































由上述例子可知,最后注册的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。




                                                        


 

0 0
原创粉丝点击