zoukankan      html  css  js  c++  java
  • APUE学习笔记 Chapter 4. Files and Directories

    1.stat , fstat , lstat

         int stat( const char * restrict pathname , struct stat * restrict buf ) ;
         int fstat ( int filedes , struct stat* restrict buf ) ;
         int lstat ( const char * restrict pathname , struct stat * restrict buf  ) ; 
         
         以上三个函数均可以获取文件的相关信息,以stat的结构返回。其中,stat使用文件名进行获取,而且会跟踪链接,而lstat会显示链接文件的信息,不会跟踪。而fstat则是通过已经打开的文件描述符来获得相关的文件信息。

     struct stat {
    mode_t st_mode; /* file type & mode (permissions) */
    ino_t st_ino; /* i-node number (serial number) */
    dev_t st_dev; /* device number (file system) */
    dev_t st_rdev; /* device number for special files */
    nlink_t st_nlink; /* number of links */
    uid_t st_uid; /* user ID of owner */
    gid_t st_gid; /* group ID of owner */
    off_t st_size; /* size in bytes, for regular files */
    time_t st_atime; /* time of last access */
    time_t st_mtime; /* time of last modification */
    time_t st_ctime; /* time of last file status change */
    blksize_t st_blksize; /* best I/O block size */
    blkcnt_t st_blocks; /* number of disk blocks allocated */
    };
    2.每个进程都有六个相关的用户ID值 :

    real user ID
    real group ID

    who we really are

    effective user ID
    effective group ID
    supplementary group IDs

    used for file access permission checks

    saved set-user-ID
    saved set-group-ID

    saved by exec functions,是effective user ID和effective group ID的复制。


    3.文件访问权限

    S_IRUSR

    user-read

    S_IWUSR

    user-write

    S_IXUSR

    user-execute

    S_IRGRP

    group-read

    S_IWGRP

    group-write

    S_IXGRP

    group-execute

    S_IROTH

    other-read

    S_IWOTH

    other-write

    S_IXOTH

    other-execute

    在访问相关的文件时,我们必须对于该路径上的所有的文件夹拥有运行权限。如果我们拥有read的权限,则可以以只读形式打开文件,
    如果 拥有write权限,则可以以写的形式打开文件。要在一个目录下新建或者删除文件,我们必须对该目录拥有写与运行权限。
    4.访问检查
    int access( const char * pathname , int mode ) ;
    5.sticky bit
    通过设定stick bit,在该文件第一次被运行后,text的内容被复制到交换区,下一次可以快速地运行。
    6.文件系统

    因为每个i-node都是要同一个文件系统内部进行编号的,所以ln(1)无法在不同的文件系统中进行链接操作。
    而在同一个文件系统中时,mv与rm操作都不需要搬运数据。
    对于每个cylinder group,可以表示成以下形式:


    打开该文件,如果该文件的link count为0,则为将该文件删除。
    每个inode都会包含如下信息:
    文件类型,文件权限,文件大小, 文件数据的指针
    stat中的信息大部分都是保存在inode之中。
    7.链接
    硬链接,均指向同一个i-node
    符号链接,通过存储指向的路径名实现,可以实现跨文件系统与指向目录。

    Function

    Does not follow symbolic link

    Follows symbolic link

    access

     

    chdir

     

    chmod

     

    chown

    creat

     

    exec

     

    lchown

     

    link

     

    lstat

     

    open

     

    opendir

     

    pathconf

     

    readlink

     

    remove

     

    rename

     

    stat

     

    truncate

     

    unlink

     

    8.文件时间:

    Field

    Description

    Example

    ls(1) option

    st_atime

    last-access time of file data

    read

    -u

    st_mtime

    last-modification time of file data

    write

    default

    st_ctime

    last-change time of i-node status

    chmod, chown

    -c

    access time 与modification time 均可以使用下面的函数进行修改:
    int utime( const char * pathname , const struct utimbuf * times ) ;


  • 相关阅读:
    Android之Handler实现延迟执行
    static{}语句块
    (转)git常见错误
    smarty使用
    git简易操作
    angular路由——ui.route
    angular服务二
    angular服务一
    angualr 实现tab选项卡功能
    EF 集合版 状态版的 增加、删除、修改 的实践
  • 原文地址:https://www.cnblogs.com/liangxing/p/1801749.html
Copyright © 2011-2022 走看看