您的位置:首页 > 运维架构 > Linux

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

2017-02-19 21:21 253 查看
关于“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。

                                                        

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux