关于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。
一、关于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 笔记 关于struct file 结构下 private_data 数据结构的思考
- linux 笔记 关于struct file 结构下 private_data 数据结构的思考
- 关于linux的用户,组,以及权限的知识结构
- Linux struct file结构
- 关于Linux目录及文档权限的研究
- FCKeditor关于图片上传出现错误“ 提示没有权限 Type=Image” 以及出现"this connector is disabled Please check the"editor/filemanager/connectors/aspx/conf
- Linux中的File_operations结构体
- 关于LINUX权限的一个题目
- 【Linux文件权限管理】关于SetUID、SetGID的说明
- UBUNTU下android安装更新包的问题(File not found:... android-sdk-linux_x86/temp (权限不够))
- [Linux]:关于cat >file,cat<file<<EOF
- 解析Linux系统关于用户权限、组
- Linux上glibc的man手册关于timeval结构解释的错误
- linux文件权限以及目录结构
- Linux目录结构与文件权限
- 关于Linux系统中用户权限问题
- 求救: 关于java与linux系统文件权限问题
- 关于Linux系统中用户权限问题
- 关于linux结构变量初始化。。
- 关于linux的文件权限和命令