您的位置:首页 > 其它

【C】——使用creat()函数需要注意的事项

2013-09-13 18:32 253 查看
 #include<fcntl.h>

 int creat(const char *pathname, mode_t mode);


  若成功则返回为只写打开的文件描述符,若出错则返回-1;

  有时候我们使用creat函数的时候可能会得不到我们想要的结果。例如:

creat("foo",0666)


  当我们使用次函数的目的创建一个文件——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(0);
if(creat("foo",0666) < 0){
printf("creat foo error!");
exit(1);
}

umask(022);
if(creat("bar",0666) < 0){
printf("creat bar error!");
exit(1);
}
return 0;
}


  结果就不用多说了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: