• 文件和目录之chmod和fchmod函数


    本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

    这两个函数使我们可以更改现有文件的访问权限:

    #include <sys/stat.h>
    int chmod( const char *pathname, mode_t mode );
    int fchmod( int filedes, mode_t mode );
    两个函数返回值:若成功则返回0,若出错则返回-1

    chmod函数在指定的文件上进行操作,而fchmod函数则对已打开的文件进行操作。

    为了改变一个文件的权限位,进程的有效用户ID必须等于文件的所有者ID,或者该进程必须具有超级用户权限。

    参数mode是表4-8中所示常量的某种按位或运算构成的。

    表4-8 chmod函数的mode常量,取自<sys/stat.h>

    mode 说明
    S_ISUID
    S_ISGID
    S_ISVTX
    执行时设置用户ID
    执行时设置组ID
    保存正文(粘住位)
    S_IRWXU
         S_IRUSR
         S_IWUSR
         S_IXUSR
    用户(所有者)读、写和执行
    用户(所有者)读
    用户(所有者)写
    用户(所有者)执行
    S_IRWXG
         S_IRGRP
         S_IWGRP
         S_IXGRP
    组读、写和执行
    组读
    组写
    组执行
    S_IRWXO
         S_IROTH
         S_IWOTH
         S_IXOTH
    其他读、写和执行
    其他读
    其他写
    其他执行

    程序清单4-4 chmod函数实例

    [root@localhost apue]# cat prog4-4.c
    #include "apue.h"
    
    int 
    main(void)
    {
            struct stat     statbuf;
    
            /* turn on set-group-ID and turn off group-execute */
            if(stat("foo", &statbuf) < 0)
                    err_sys("stat error for foo");
            if(chmod("foo", (statbuf.st_mode & ~S_IXGRP) | S_ISGID) < 0)
                    err_sys("chmod error for foo");
    
            /* set absolute mode to "rw-r--r--" */
            if(chmod("bar", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) < 0)
                    err_sys("chmod error for bar");
    
            exit(0);
    }
  • 相关阅读:
    [leedcode 104] Maximum Depth of Binary Tree
    [leedcode 103] Binary Tree Zigzag Level Order Traversal
    [leedcode 102] Binary Tree Level Order Traversal
    [leedcode 101] Symmetric Tree
    [leedcode 100] Same Tree
    [leedcode 99] Recover Binary Search Tree
    深入理解java虚拟机---内存分配策略(十三)
    jmeter4.0 源码编译 二次开发
    jmeter源码导入eclipse并执行
    深入理解java虚拟机---垃圾回收(十一)
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3502457.html
Copyright © 2020-2023  润新知