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 ) ;


  • 相关阅读:
    DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting
    DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
    DVWA 黑客攻防演练(八)SQL 注入 SQL Injection
    DVWA 黑客攻防演练(七)Weak Session IDs
    DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
    DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
    工作流表结构设计
    Visual Studio 2019尝鲜----新建空项目体验
    《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
    .NET快速开发平台的在线预览
  • 原文地址:https://www.cnblogs.com/liangxing/p/1801749.html
Copyright © 2011-2022 走看看