个人学习整理,如有不足之处,请不吝不吝赐教。转载请注明:@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. 使用CSS3制图

    参考资料:http://blog.csdn.net/fense_520/article/details/37892507 本文非转载.为个人原创,转载请先联系博主,谢谢~ 准备: <!DOCTY ...

  2. swift 笔记 (十八) —— 扩展

    扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...

  3. 0当执行游戏xc000007b错误的解决方法

    如图所示,这个错误是让很多玩家担心. 出现这个错误,可能是硬件的问题,也可能是软件的问题. 可是.因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件 ...

  4. Form表单中的action路径问题

    今天刚接触web,在用jsp和servlet做一个简单的登陆的时候在Form表单action属性和method属性的一些问题:  我遇到的是Form表单提交到servelet处理时遇到的问题:  (1 ...

  5. C#项目开发实践前言

    曾经没有做过项目开发实现解说,都是在工作过程其中,自动学习,查找资料,由于在曾经的公司就我一人在做c#WinForm开发,所以,有时候在公司培训会上,我也会为新的员工进行过一些简单的项目解说,基于在培 ...

  6. 1、Cocos2dx 3.0游戏开发三找一小块前言

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  7. petshop4.0 其中详细解释(系统架构)

    前言:PetShop它是一个例子.微软用它来展示.Net容量企业系统开发.业界有很多.Net与J2EE争议.微软许多数据PetShop和Sun的PetStore从.这样的争论是不可避免的带有强烈的商业 ...

  8. 如何判断一个Http Message的结束——python源码解读

    HTTP/1.1 默认的连接方式是长连接,不能通过简单的TCP连接关闭判断HttpMessage的结束. 以下是几种判断HttpMessage结束的方式: 1.      HTTP协议约定status ...

  9. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  10. Eclipse+Maven命令创建webapp项目<三>

    1.使用maven命令:mvn archetype:create -DgroupId=xxxxx -DartifactId=web-sample -DarchetypeArtifactId=maven ...