此函數(shù)的主要作用是在創(chuàng)建文件時設(shè)置或者屏蔽掉文件的一些權(quán)限,。一般與open()函數(shù)配合使用,。 umask(設(shè)置建立新文件時的權(quán)限遮罩) 返回值為原先系統(tǒng)的umask值。 open函數(shù)原型: #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 當(dāng)創(chuàng)建一個文件并且要明確指定此文件的權(quán)限時,,應(yīng)該使用第二個open()函數(shù),,明確指定mode參數(shù),所創(chuàng)建的文件最后的權(quán)限是:mode&(~mask),。默認(rèn)的mask值是:022 例: #include <sys/types.h> ........ ........ #include <fcntl.h> int main() { int fd; umask(0026); fd = open("test.txt",O_RDWR | O_CREAT,0666); if(fd < 0) perror("open"); return 0; } 則生成的test.txt文件的權(quán)限是:666&(~026)結(jié)果是:- rw- r-- ---. 如果沒有umask(0026);這條語句,,則生成的test.txt文件的權(quán)限是:666&(~022)結(jié)果是:- rw- r-- r-- 注:open函數(shù)的mode參數(shù)只有在創(chuàng)建文件時才有效。 ---------------------------------------------------------------------------------------------------------------------------------------- umask返回值實例: #include<stdio.h> #include<sys/stat.h> #include <fcntl.h> void main() { int fd; int a,b; a = umask(0);//當(dāng)前umask值設(shè)置為0,,先前umask值默認(rèn)為0022 printf("%o\n",a);//打印值為先前的umask值,,即22(八進(jìn)制) b = umask(a);//設(shè)置當(dāng)前umask值為a=22,返回值為先前值0 printf("%o\n",b);//0 printf("%o\n",umask(0026));//當(dāng)前26,,返回值先前22 printf("%o\n",umask(0066));//當(dāng)前66,返回值先前26 fd = open("22test22.txt",O_RDWR | O_CREAT,0666); if(fd < 0) perror("open"); } -------------------- 輸出為: 22 0 22 26 ------------------------------------------------------------------------------- ls -l 22test22.txt -rw------- 1 root root 0 2012-06-05 16:28 22test22.txt 0666& (~0066)=0600,,即rw- --- --- |
|