码迷,mamicode.com
首页 > 系统相关 > 详细

每天整理点Linux--umask | chmod

时间:2016-07-02 17:17:32      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

  当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。

 

#include "apue.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>

#define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)

int main()
{
    struct stat statbuf;
    //更改进程的 umask值不会改变 其父进程的umask
    umask(0);
    if (creat("foo", RWRWRW) < 0)
    {
        printf("create error");
        exit(0);
    }
    umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
    if (creat("bar", RWRWRW) < 0)
    {
        printf("create error");
        exit(0);
    }
    
    /* chmod 改变文件访问权限  */
    
    /*
    if (stat("foo", &statbuf) <0 )
    {
        printf("stat error");
        exit(0);
    }
    // S_IXGRP 执行时设置组ID  设置了组ID位 关闭了组执行位
    if (chmod("foo", (statbuf.st_mode & ~S_IXGRP) | S_ISGID ) < 0 )
    {
        printf("chmod foo error");
        exit(0);
    }
    if (chmod("bar", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))
    {
        printf("chmod bar error");
        exit(0);
    }
    */
    return 0;
}

 技术分享

 

每天整理点Linux--umask | chmod

标签:

原文地址:http://www.cnblogs.com/how-are-you/p/5635624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!