atexit函数和粘制位问题及file

本文介绍了atexit函数的使用方式及其在程序退出时的执行顺序特性,并详细解析了Linux环境下文件结构体的各个成员变量的作用及意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值