个人学习整理,如有不足之处,请不吝不吝赐教。转载请注明:@CSU-Max

系列博文:

Linux&Unix学习第二弹
-- 文件描写叙述符与权限

文件描写叙述符

每个UNIX进程都有一个文件描写叙述符范围,其大小为0到N,N标志文件描写叙述符的最大值。N的大小取决于UNIX的版本号及系统配置。

实际上。它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时。内核向进程返回一个文件描写叙述符。在Linux和Unix操作系统的程序设计中。一些涉及底层的程序编写往往会环绕着文件描写叙述符展开。

标准文件描写叙述符

一般在进程执行时前三个文件描写叙述符就已经打开了。

文件描写叙述符 0 : 标准输入

文件描写叙述符 1 : 标准输出

文件描写叙述符 2 : 标准错误输出

除了使用数字来表示之外。也能够使用符号常数,相应的各自是为:STDIN_FILENO, STDOUT_FILENO。 STDERR_FILENO。

这些标准文件描写叙述符中不论什么一个都能够打开文件、管道、FIFO、设备甚至是套接字,调用read和write系统调用时能够马上使用这三个标准文件描写叙述符。用于文件、管道等其它的文件描写叙述符能够通过进程本身获得。

文件描写叙述符仅仅是对每一个进程表的索引。

进程表中每一个记录项指向一个全系统的打开文件描写叙述(即文件表记录项)。而文件描写叙述符指向文件数据。

上述过程可用下图表示:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N1X21heA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

如上图所看到的,多个文件描写叙述符,甚至来自不同进程的文件描写叙述符都可指向同一个文件描写叙述。

每个open或pipe系统调用都会创建一个新的打开文件描写叙述和新的文件描写叙述符。如上图所看到的,进程A两次都打开了同一个文件,得到了文件描写叙述符5和6之后。并创建了打开文件描写叙述1和2。后通过文件描写叙述符复制机制,进程A得到了文件描写叙述符5的复制品——文件描写叙述符7。当然,文件描写叙述符7指向的打开文件描写叙述与文件描写叙述符5指向的是同样的。即指向同一个打开文件描写叙述,而不是像前面所说会创建新的。进程B是进程A的子进程。文件描写叙述符3允许是文件描写叙述符5的复制品。

文件权限及表示

每一个文件的信息节点中都有一个全部者用户ID(简称全部者)和一个全部者组ID(简称组),同一时候,信息节点中还包括有三组权限位,每组三位,每组包括一个读权限位,一个写权限位和一个运行权限位。

值为1时表示同意权限。为0时表示拒绝权限。

三组权限中。一组用于全部者,一组用于组,一组用于其它用户(即不在前面两类中)。

权限位一般依照全部者、组、其它用户三组的一次顺序来表示的,通经常使用八进制数来表示。

详细表示方法例如以下图所看到的:

比如,八进制数755表示全部者有读、写和运行的权限,而组和其它用户仅仅有读和运行权限。ls 命令显示其权限组合为 rwxr-xr-x ,用二进制表示为 111101101 。

文件权限位符号

假设你觉得文件权限必须用上述的方法:9个文件权限位应该放在一起,并有一定的顺序(全部者、组、其它用户)。那就错了。

实际上并不是如此,仅仅要有这9个权限位就可以。

权限位符号就是第二种表示文件权限的方法,可用来取代传统的八进制数表示。

这些符号的形式为 S_Ipwww ,当中 p 代表訪问权限(R。W或X),www 代表谁操作(USR, GRP 或 OTH)。这就表示出了所有的9个符号。

比如之前提到的样例,不用八进制的755,可用权限位符号表演示样例如以下:

S_IRUSR | S_IWUSR | S_IXSUR | S_IRGRP |S_IXGRP | S_IROTH | S_IXOTH

当USR、GRP或OTH拥有全部的三种訪问权限时,则能够使用单独的符号,形式如: S_IRWXw 。

这里 w 表示的是用户类型,就可以为U、G或O。

故上述文件訪问权限也能够表演示样例如以下:

S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH |S_IXOTH

尽管这样的描写叙述方式可读性较差。也非常easy出错。可是操作者可自由安排权限位的位置,而且读编程来说它也更加方便,一般我们会一次性定义好所须要的宏,而不是在全部须要的位置都使用长的如 S_IRUSR 的符号序列。

#define PERM_DIRECTORY       S_IRWXU

#define PERM_FILE             (S_IRSUR | S_IWSUR | S_IRGRP | S_IROTH)

这样仅需改变一次宏。就能够改变整个应用程序的訪问权限策略。

***************************************************************************

*  转载请注明出处:  @CSU-Max   http://blog.csdn.net/csu_max 
    *

***************************************************************************

版权声明:本文博客原创文章。博客,未经同意,不得转载。

【Linux&Unix--文件描述叙事的性格和权柄】的更多相关文章

  1. Linux中的文件描述符与打开文件之间的关系

    Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...

  2. Linux exec与文件描述符

    看到好几篇文章讲述exec都是一知半解,所以我尽量说的清楚明白一些.本文首先讲述Linux文件描述符,然后是exec,最后举例说明exec I/O重定向及其用法. 概念:exec命令用于调用并执行指令 ...

  3. Linux Linux下最大文件描述符设置

    Linux下最大文件描述符设置 by:授客 QQ:1033553122 1.   系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 6 ...

  4. [svc]linux中的文件描述符(file descriptor)和文件

    linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...

  5. linux fcntl 对文件描述符控制

    linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制

  6. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列

    http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...

  7. (转)Linux中的文件描述符

    本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...

  8. linux exec和文件描述符妙用技巧(转)

    最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言 ...

  9. (转)Linux中的文件描述符与打开文件之间的关系

    转:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文 ...

随机推荐

  1. WebForm / MVC 源码分析

    ASP.NET WebForm / MVC 源码分析   浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm ...

  2. HDU1698_Just a Hook(线段树/成段更新)

    解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...

  3. IIS6,IIS7中查看w3wp进程

    当我们服务器创建了很多应用程序池,然后某个w3wp.exe进程占用CPU和内存过高,我们怎么查找这个w3wp.exe进程属于哪一个网站呢.其实微软为我们提供了很好的查看工具: 首先打开windows任 ...

  4. CKEditor上传插件

    CKEditor上传插件 前言 CKEditor上传插件是不是免费的,与您分享在此开发.这个插件是基于ASP.NET MVC下开发的,假设是webform的用户或者其他语言的用户.能够參考把serve ...

  5. STM32本学习笔记EXTI(外部中断)

    参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...

  6. 微信小程序开发者工具集合包

    开发论坛 http://www.henkuai.com/forum-56-1.html 工具包下载  https://yunpan.cn/ckXFpuzAeVi2s  访问密码 b4cc 开发文档 h ...

  7. uva10341 - solve it (二分查找)

    题目:uva10341-solve it 题目大意:求解给定的方程式解题思路:由于这个方程式在给定的x的范围内是单调递减的.所以能够用二分查找来尝试x的值.这里的 x是要求保留4小数,所以当区间缩小到 ...

  8. java提高篇(七)-----详解内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  9. html/css获得第一章

    1.基本教程来学习 大概3天课余时间阅读下面的两个教程. HTML文字教程 CSS文字教程 2.练习 看完教程后.做第一练习时,总结例如以下: 1)div居中 须要设置属性:margin-left:a ...

  10. ASP.NET2.0组件控件开发视频 初体验

    原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...