atexit函数和粘制位问题及file

    xiaoxiao2021-03-25  115

    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时对这个 指针赋值。 

    atomic_long_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; 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 };
    转载请注明原文地址: https://ju.6miu.com/read-3761.html

    最新回复(0)