umask
为进程设置文件方式创建屏蔽字,也就是说umask一个权限后进程就会取消它
//屏蔽权限测试--------------4_3.c----------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ourhdr.h"
#include "err_error.h"
int main(void)
{
umask(0);
if(creat("foo",S_IRUSR | S_IWUSR | S_IRGRP |S_IWGRP |
S_IROTH | S_IWOTH)<0)//生成foo,权限为用户读写,组读写,其他读写
err_sys("creat error for foo");
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); //屏蔽组读写,其他读写
if(creat("bar",S_IRUSR | S_IWUSR | S_IRGRP |S_IWGRP |
S_IROTH | S_IWOTH)<0)//被屏蔽了一些权限
err_sys("creat error for bar");
exit(0);
}
//----------------------end-----------------------
king@king-laptop:~/programe/UNIX/4$ gcc -o 4_3 4_3.c
king@king-laptop:~/programe/UNIX/4$ ./4_3 ;ls -l foo bar
-rw------- 1 king king 0 2009-02-07 13:00 bar 创建bar时的creat与创建foo时的是一样的,只是被屏蔽掉了一部分
-rw-rw-rw- 1 king king 0 2009-02-07 13:00 foo
king@king-laptop:~/programe/UNIX/4$
chmod,fchmod
改变文件的存取许可权
//---------------------4_4.c----------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ourhdr.h"
#include "err_error.h"
int main(void)
{
int fd;
if(chmod("foo",S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)<0);//改为用户读,用户写,组读,其他读
if((fd=open("bar",O_RDWR))==-1)
err_sys("open error");
if(fchmod(fd,S_IRUSR | S_IWUSR )<0)//改为用户读,用户写
err_sys("chmod error for bar");
exit(0);
}
//-------------------------end-------------------------
king@king-laptop:~/programe/UNIX/4$ gcc -o 4_4 4_4.c
king@king-laptop:~/programe/UNIX/4$ ls -l bar foo
-rw------- 1 king king 0 2009-02-07 13:00 bar
-rw-rw-rw- 1 king king 0 2009-02-07 13:00 foo
king@king-laptop:~/programe/UNIX/4$ ./4_4 ; ls -l bar foo
-rw------- 1 king king 0 2009-02-07 13:00 bar 嘿,看到了吗?
-rw-r--r-- 1 king king 0 2009-02-07 13:00 foo
king@king-laptop:~/programe/UNIX/4$
chown,fchown,lchown
改变文件的用户ID和组ID,书上说只有超级用户才可使用,我没做过,试试吧
//-----------------chown.c--------------------------
#include <sys/types.h>
#include <unistd.h>
#include "ourhdr.h"
#include "err_error.h"
main()
{
if(chown("chown.c",0,0)==-1)//把自己的文件改成root
err_sys("chown error");
}
//-----------------------end------------------------
king@king-laptop:~/blog$ gcc -o chown chown.c
king@king-laptop:~/blog$ ls -l chown.c
-rw-r--r-- 1 king king 183 2009-02-07 13:32 chown.c
king@king-laptop:~/blog$ ./chown //呜呜,一般用户就是不能用啊
chown error: Operation not permitted
king@king-laptop:~/blog$ sudo ./chown ; ls -l chown.c
-rw-r--r-- 1 root root 183 2009-02-07 13:32 chown.c
king@king-laptop:~/blog$
truncate,ftruncate
文件截短,保留头部length字节
//--------------------truncate.c---------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "ourhdr.h"
#include "err_error.h"
main()
{
char line[MAXLINE]="Hello world!/n";
int fd;
if((fd=creat("234",0666))==-1)
err_sys("creat error");
if(write(fd,line,13)!=13)
err_sys("write error");
close(fd);
system("cat 234");
if(truncate("234",5)==-1) //我们只保留Hello
err_sys("trucate error");
system("cat 234");
exit(0);
}
//-------------------------end---------------------------
king@king-laptop:~/blog$ gcc -o truncate truncate.c
king@king-laptop:~/blog$ ./truncate
Hello world!
Helloking@king-laptop:~/blog$ //看到了吗,由于没有'/n',所以没有换行