《Linux/Unix系统编程手册》读书笔记 目录

在Linux里,万物皆文件。所以文件系统在Linux系统占有重要的地位。本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有更深入的研究一定会写出来。

下图为磁盘分区与文件系统的关系

文件系统中的文件(目录)在i-node表上都有唯一的记录(i-node)。i-node通过数据块指针指向数据块,这些数据块就是该i-node对应的文件的数据。

i-node与数据块的关系如下:

因为Linux支持很多类型的文件系统,但是每种文件系统的实现存在差异。为了解决这种差异,内核提供了虚拟文件系统,通过在应用程序与文件系统之间添加一个抽象层来让程序员在编写应用程序的时候不用考虑文件系统的种类。

初步了解文件系统后,进入正题-----文件属性

正因为万物皆文件,我们很多时候需要获取文件的信息,以便知道它是普通文件还是目录文件,或者想知道它的时间戳等信息。这时候我们可以通过stat()系统调用来获取我们想要的文件信息。

 #include <sys/stat.h>

 int stat(const char *pathname, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);

调用成功返回0,失败返回-1。文件的信息会存放到statbuf。

pathname为文件名,对于lstat,如果文件为符号链接的时候返回的为该链接的信息,而不是指向的文件。

fstat则是获取打开文件描述符对应的文件的信息。

接着来看看stat结构的格式:

其中将st_mode与S_IFMT相与,可以得到文件类型,而st_mode的低12位为文件权限。除此之外还有时间戳需要注意,st_atime代表上次访问时间,st_mtime代表上次修改文件时间,st_ctime代表上次文件状态发生改变的时间。

我们经常会接触到文件的权限。其中用户分为3类:文件的所属者(owner),文件所属者所在的用户组,其他用户。每类的用户有3种权限:可读,可写,可执行。

练习:

15-6:命令chmod a+rX file 的作用是对所有各类用户授予读权限,并且当file是目录或者file的任一类用户有可执行权限时,将向所有各类用户授予可执行权限。

 #include "tlpi_hdr.h"
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h> #define READ (S_IRUSR | S_IRGRP | S_IROTH)
#define EXECUTE (S_IXUSR | S_IXGRP | S_IXOTH) int main(int argc, char *argv[]){
struct stat sb;
int i; if(argc < || strcmp(argv[], "--help") == )
usageErr("%s filename...\n", argv[]); for(i = ; i < argc; i++){
if(stat(argv[i], &sb) == -)
errExit("stat"); if((sb.st_mode & S_IFMT) == S_IFDIR){
if(chmod(argv[i], sb.st_mode | READ | EXECUTE) == -)
errExit("chmod");
} if((sb.st_mode & S_IFMT) == S_IFREG){
if(chmod(argv[i], sb.st_mode | READ) == -)
errExit("chmod");
if((sb.st_mode & S_IXUSR) || (sb.st_mode & S_IXGRP) || (sb.st_mode & S_IXOTH))
if(chmod(argv[i], sb.st_mode | EXECUTE) == -)
errExit("chmod");
}
} exit(EXIT_SUCCESS);
}

结果:

[lan@alan tlpi]$ ls -ld dir file prog
d--------- lan lan Jul : dir
-r-------- lan lan Jul : file
-r-x------ lan lan Jul : prog
[lan@alan tlpi]$ ./15.6 dir file prog
[lan@alan tlpi]$ ls -ld dir file prog
dr-xr-xr-x lan lan Jul : dir
-r--r--r-- lan lan Jul : file
-r-x--x--x lan lan Jul : prog

-------先把一个小坑填了,好久没有写博客了,这段时间找实习,准备考试。。。终于忙完了。。。。值得思考的事情太多太多了。。。。打算写一篇总结,终结这半年的事。。。。

-------继续努力吧,努力以后才不会后悔。。。。继续巩固Linux系统编程,多看书,多代码,多思考!!!!!!

《Linux/Unix系统编程手册》读书笔记9(文件属性)的更多相关文章

  1. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  2. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  3. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  4. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  5. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  6. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  7. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

  8. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  9. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

随机推荐

  1. SASS学习笔记_02

    导入 当模块化布局的时候 导入头和尾 私有化 不生成css文件 文件名前面加下划线   结果   嵌套导入   导入css文件 不推荐   注释 和默认变量值

  2. 计算器软件的代码实现 (策略模式+asp.net)

    一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...

  3. 【Python】网络编程

    1.TCP编程 2.SocketServer模块 3.Twisted框架 4.UDP编程 1.TCP编程--TCP是面向连接的,其一般的设计如下: # encoding:utf-8 ''' Creat ...

  4. 12 高性能I/O框架库Libevent

    这里不讲Libevent库的具体内容了,从宏观上对I/O库整体做个介绍 Linux服务器程序必须处理三类事件:I/O事件,信号和定时事件 统一事件源:统一处理这三类事件既能使代码简单易懂,又能避免一些 ...

  5. ios瀑布流

    http://blog.csdn.net/shenjx1225/article/details/9037631

  6. 提高Asp.Net应用程序性能的十大方法(译感)

    译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.第一条:返回多个结果集因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以 ...

  7. NET 查找程序集路径(CLR关于Assembly的搜索路径的过程)

    最近在回顾.Net应用程序的执行环境,这里做一个很小的总结,方面以后需要的时候进行查找: CLR必须可以找到正确的Assembly,Net提供了Assembly搜索算法,可以根据.config文件(类 ...

  8. 通过HTML条件注释判断IE版本的HTML语句详解<!--[if IE]> <![endif]-->

    我们常常会在网页的HTML里面看到形如[if lte IE 9]……[endif]的代码,表示的是限定某些浏览器版本才能执行的语句,那么这些判断语句的规则是什么呢?请看下文: <!--[if ! ...

  9. Sqli-labs less 56

    Less-56 与less54.55形式是一致的,我们关注sql语句, $sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0 ...

  10. 7 天玩转 ASP.NET MVC — 第 7 天

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...