C语言open()和creat()函皇冠数体育平台出租创建文件时,文件权限设置相关

皇冠体育平台出租haozbbs.com Q1446595067 open()和creat()创建文件时,文件权限说明

首先了解一下 umask 命令,该命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。简单地来说,umask和open()及creat()函数的权限码(mode_t mode参数)共同决定你的新建文件的权限。具体关系为mode & ~umask。

下面通过简单的程序来验证它们之间的关系。
Linux C

由于open()和creat()创建文件,结果一致,我们直接采用creat()函数:

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>

int main()
{
if( creat("/aicamel/boa/file.txt",0777) < 0 ) {
printf("文件创建失败!\n");
} else {
printf("文件创建成功!\n");
}
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13

编译和运行

[email protected]:/aicamel/boa# gcc -o test test.c
[email protected]:/aicamel/boa# ./test
文件创建成功!
[email protected]:/aicamel/boa# ls -l file.txt
-rwxr-xr-x 1 root root 0 7月 5 09:24 file.txt
[email protected]:/aicamel/boa# umask
0022
[email protected]:/aicamel/boa#

1
2
3
4
5
6
7
8

我们可以看到实际创建的 file.txt 文件权限为 -rwx r-x r-x,并且当前系统的 umask 值为 0022 。我们创建文件时,希望创建的文件权限为 0777 ,也就是-rwx rwx rwx。我们现在来验证一下是否满足mode & ~umask。
~umask即为umask 取反值为 1755
我们创建文件的 mode 值为 0777
mode & ~umask 为 0755,也就是-rwx r-x r-x,与实际创建的文件权限一致。

看到这你应该知道怎么一回事了,但是如果我们的程序运行在ARM开发板上时,有时会出现umask值同样为0022,mode值同样为0777,当创建出的文件权限始终为-rw- - - - - - -,无论我们如何修改umask值和mode值,创建出的文件权限始终不变,如果遇到这种情况,我们需要使用umask()函数,即可解决这个问题。
使用umask()函数

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>

int main()
{
umask(0000); //将umask值设置为0000,实际创建的文件权限即为下面的mode值
if( creat("/aicamel/boa/file.txt",0777) < 0 ) {
printf("文件创建失败!\n");
} else {
printf("文件创建成功!\n");
}
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

编译运行结果为

[email protected]:/aicamel/boa# gcc -o test test.c
[email protected]:/aicamel/boa# ./test
文件创建成功!
[email protected]:/aicamel/boa# ls -l file.txt
-rwxrwxrwx 1 root root 0 7月 5 09:51 file.txt
[email protected]:/aicamel/boa# umask
0022
[email protected]:/aicamel/boa#

1
2
3
4
5
6
7
8

从运行结果来看,代码中使用umask()函数,并不会改变系统的umask值,只会临时改变umask值。所以个人建议,我们使用open()和creat()时,在代码上方加上一句umask(0000);,这样我们在使用open()和creat()时,就不需要特别计算mode值了。

原文地址:http://blog.51cto.com/13861635/2139691

时间: 2024-10-29 08:16:54

C语言open()和creat()函皇冠数体育平台出租创建文件时,文件权限设置相关的相关文章

Unity3D之使用Profile查皇冠看体育平台搭建真机性能

Unity自皇冠体育平台搭建论坛:haozbbs.com Q1446595067 带的Profile可以用来对程序性能(内存占用.渲染瓶颈)进行查看.分析,当应用程序发布出来之后,还能通过Profile对应用程序真机进行测试,对不同设备兼容性进一步测试. iOS使用Profile: 通过USB连接调试设备和Mac 发布设置Build Settings里,勾选"Development Build"和"Autoconnect Profiler" 发布Xcode工程 调试

WordCount C语言实现求文本的字符数,单词数,行数

1.码云地址: https://gitee.com/miaomiaobobo/WordCount 2.psp表格 PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 25 20 · Estimate · 估计这个任务需要多少时间 10 5 Development 开发 200 350 · Analysis · 需求分析 (包括学习新技术) 25 20 · Design Spec · 生成设计文档 30 20 · Design Review

fopen()函数以&quot;a+&quot;方式打开一个不存在的文件后读写出现问题

问题:在完成课后习题的时候,使用fopen()函数以"a+"方式打开一个不存在的文件时,写入.读取出现错误: 1 //添加用户输入单词后,在单词头加入编号,确保编号跟着前面的开始排序 2 #include "stdio.h" 3 #include "stdlib.h" 4 #define MAX 40 5 6 int main(void){ 7 FILE *fp; 8 char words[MAX]; 9 int count = 1, 10 te

新版皇冠体育平台开发源码网站搭建环境架设教程

新版皇冠体育平台开发源码搭建Q:2947702644网站环境架设教程[游戏特色]程序源码下载参数说明:运行环境:php5.2+mysql源码类别:(体育赛事)现金网系统界面语言:三种语言版本支持:PC/WAP网页版编程语言:PHP 一个网站需要程序,域名,空间.这本是三个独立产品,如何把他们关联起来,形成我们可以正常访问网站呢?下面就来讲讲如何在iis上,搭建网站.以下实例是在window 2008 server上安装iis 7.0,搭建.net网站. 方法/步骤 打开iis,如图是iis的全局

数加平台——阿里大数据OS实践

数加是什么 在阿里云的官网打开大数据部分(整个大数据部分统称为数加),其中包括:大数据基础服务部分,MaxCompute.ADS.流计算.大数据开发套件:人工智能部分,机器学习(基础平台是PAI).语音识别.ET等:数据分析展现部分,数据可视化(大屏.BI报表).I+关系网络分析(安全领域用的比较多):数据应用部分,推荐引擎(提供面向终端用户的服务,以大数据中间件存在)等.天池比赛也是基于数加平台,数加数据市场相当于大数据的App Store. 数加是什么?数加=数加平台+数加市场+数加应用.平

问题1:js这么语言的能力取决于什么?(运行平台)问题2:js是否能够操作文件(一般不能),ajax能否操作文件(一般不能)?

问题:js这么语言的能力取决于什么?(运行平台) 答:现在的js语言可以在浏览器运行(js如果是在浏览器端运行则不能操作磁盘文件),也可以在服务器端运行nodeJs(js在服务器端能够操作文件). 问题:js是否能够操作文件(一般不能),ajax能否操作文件(一般不能)? 答: a. js一般不能,但是分情况看,如果是在服务器端,则可以操作.如果是在浏览器端,则不能直接操作,但是可以操作cookie小文件. b. ajax一般不能操作文件:但是在最新的 ajax level2(formData对

数加平台如何通过Serverless 架构实现普惠大数据

阿里云大数据 Serverless 理念 Serverless是一种架构理念,指的是以服务的形式来提供计算能力而不是以服务器形式,让开发者在构建应用的过程中不用过多考虑基础设施的问题.大数据业务本来就是最典型的计算业务,从计算的场景上来说,涵盖了离线批量计算.实时流计算.在线实时计算等,在很多情况下还需要把这些计算能力组合起来才能满足需求.所以Serverless 的架构天生就能很好的适用于大数据应用的场景,能把数据科学家从底层服务器层的运维管理等解放出来,让数据科学家专注在数据价值的探索挖掘上

一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)

各位看官们,大家好,上一回中咱们说的是从内存角度看进程和线程的例子,这一回咱们说的例子是:创建进程时的内存细节.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们都知道使用fork函数可以创建一个新的进程,今天我们一起说一下使用该函数创建进程时内存的一些细节问题.我们介绍的的重点还是内存布局中的四个分区. 1.在父进程中使用fork时,会创建一个新的进程,我们叫它子进程,子进程有自己的内存空间: 2.子进程的内存空间中没有代码区,子进程和父进程共享代码区: 3.子进程的内存空间中拥

android多国语言文件夹文件汇总

中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW中文(香港):values-zh-rHK英语(美国):values-en-rUS英语(英国):values-en-rGB英文(澳大利亚):values-en-rAU英文(加拿大):values-en-rCA英文(爱尔兰):values-en-rIE 英文(印度):values-en-rIN英文(新西兰):values-en-rNZ英文(新加坡):values-en-rSG英文(南非):values-en-rZA 阿