【C】——使用creat()函数需要注意的事项
#include<fcntl.h> int creat(const char *pathname, mode_t mode);
若成功则返回为只写打开的文件描述符,若出错则返回-1;
有时候我们使用creat函数的时候可能会得不到我们想要的结果。例如:
creat("foo",)
当我们使用次函数的目的创建一个文件——foo,foo的属性为 -rw-rw-rw-;
但是我们执行完creat函数之后可能会发生其他的结果,笔者的系统是REHL5.1,当我执行完creat函数之后foo的属性为:-rw-r--r--;
这是为什么呢?
如果你想知道为什么,就在命令行里执行umask看一下吧;
笔者执行完umask的结果为022;umask为何物?
该命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。
默认情况下root的umask为022,一般用户为002。通过vim或者vi创建文件的时候文件的属性为 666 - 默认的umask值;建立目录的时候,目录的属性为777 - umask的默认值;
了解了这些,执行creat函数的结果就不会感到意外了。初始的属性为0666但是默认的umask为022.所以创建文件的属性就变成了-rw-r--r--;
如何达到自己想要的结果呢?毫无疑问用umask函数吧;
#include<sys/stat.h>
mode_t umask(mode_t cmask);
返回值:以前的文件模式创建屏蔽字(没有出错返回值);
下面用一个例子直接展示吧!
#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h> int main(int argc, char *argv[])
{
umask();
if(creat("foo",) < ){
printf("creat foo error!");
exit();
} umask();
if(creat("bar",) < ){
printf("creat bar error!");
exit();
}
return ;
}
结果就不用多说了!
【C】——使用creat()函数需要注意的事项的更多相关文章
- 文件I/O(不带缓冲)之creat函数
本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 也可调用creat函数创建一个新文件. #in ...
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
主要内容:函数返回指针注意事项<悬空指针>.查看进程能够分配的内存大小 #include <stdio.h> char * favorite_fruit() { static ...
- memset函数用法及注意事项
头文件 #include<cstring>// or #include<memory.h> ------------------------------------------ ...
- C++ vector erase函数的使用注意事项
最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项. 在C++primer中对c.erase(p) 这样解释的: c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素 ...
- Linux system 函数的一些注意事项
在日常的代码编程中 , 我们可以利用system 函数去调用一些我们自己想调用的命令 , 并获取他的返回值. 函数的原型如下: int system(const char *command); 上一 ...
- TransparentBlt函数的使用注意事项
今天客户需要在软件上需要添加一个自己公司的Logo,要求使用镂空透明的形式展现,本来以为很简单的工作没想到在MFC下这么复杂.Logo为BMP格式,白色背景. 以为和在按钮上显示控件差不多,先导入BI ...
- Python的内置函数open()的注意事项
用法 : open("file_address","open_mode")例子 : f = open("D:\PycharmProjects\log. ...
- Java String.split()函数分隔回车注意事项
作者:Sun1956 原文:https://blog.csdn.net/sun1956/article/details/45096117 --------------------- 我们在Java中如 ...
- sql强大的行转列功能(内置函数pivot及注意事项)
语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) ) ...
随机推荐
- 温故而知新 监听 XMLHttpRequest 发起请求
window.XMLHttpRequest.prototype.open 可以监听 XMLHttpRequest .但不能监听fetch请求. <!DOCTYPE html> <ht ...
- nginx 读取文件 permission denied
nginx 是在root用户下安装的,静态网页的目录/var/www/html/ 目录下的内容所有者也是root 用户,按照 nginx配置文件中location说明 配置静态文件访问地址. 使用网址 ...
- windowns 2008(apache2.2.25 x86 openssl0.98y) 升级openssl1.0.1e(为了支持小程序接口TLS1.2)
原来只知道微信小程序,服务器接口必须支持 https, 所以在搭建环境的时候没有注意, 只是在原来已有的系统框架上,稳健升级,把apache2.2.25 X86_no_openssl升级为了apach ...
- hackerrank-knapsack
https://www.hackerrank.com/challenges/unbounded-knapsack 题目描述: #include <iostream> #include &l ...
- Flume 相关
在CentOS 7上安装配置Flume https://mos.meituan.com/library/41/how-to-install-flume-on-centos7/ Flume NG 学习笔 ...
- linux 安装 Headless Chrome
http://blog.csdn.net/goodzyw/article/details/77269875 https://chromedriver.storage.googleapis.com/in ...
- Android: TextView 及其子类通过代码和 XML 设置字体大小的存在差异的分析
原因: 在代码中通过 setTextSize(float size) 设置,使用的是 sp 为默认单位. 而 XML 中使用了 px,所以需要使用先把做好 sp 和 px 的转换工作. 最近在做 ap ...
- redis-3.0.0_rc5的RPM包制定
首先查看脚本: # cat /tmp/redis_before.sh #!/bin/bash if [ ! -d /apps/redis-3.0.0-rc5 ];then mkdir -p /apps ...
- ashx页面返回json字符串|jQuery 的ajax处理请求的纠结问题
纠结,整了半天的jquery的ajax请求数据. 遇到的问题: 1 ajax方法一直进入error方法里,进入到请求的.ashx页面.这个问题,我未找到是什么原因.反正我使用了一下的代码,就好了. $ ...
- 非nodejs方式的vue.js的使用
1.node环境 详细见我之前的文章,node的安装 2.git环境 git bash命令窗,支持bash命令,cmd不支持bash命令 3.cnpm安装 cnpm是针对国内使用npm网络慢的而使用的 ...