我最近开始学习unix,我正在尝试一些与文件相关的简单程序。我正在尝试使用函数 F_SETFL 通过代码更改文件的访问权限。我创建了只有写权限的文件,现在我正在尝试通过代码更新权限。但是所有的权限都被重置了。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void) {
int fd =0;
int fileAttrib=0;
/*Create a new file*/
fd = creat("/u01/TempClass/apue/file/tempfile.txt",S_IWUSR);
fileAttrib = fcntl(fd,F_GETFL,0);
if(fileAttrib < 0 ) {
perror("An error has occurred");
}
printf("file Attribute is %d \n",fileAttrib);
switch(fileAttrib) {
case O_RDONLY:
printf("Read only attribute\n");
break;
case O_WRONLY:
printf("Write only attribute\n");
break;
case O_RDWR:
printf("Read Write Attribute\n");
break;
default:
printf("Somethng has gone wrong\n");
}
int accmode = 0;
//accmode = fileAttrib & O_ACCMODE;
accmode = 777;
fileAttrib = fcntl(fd,F_SETFL,accmode);
if(fileAttrib < 0 ) {
perror("An error has occurred while setting the flags");
}
printf("file Attribute is %d \n",fileAttrib);
/*Print the new access permissions*/
switch(fileAttrib) {
case O_RDONLY:
printf("New Read only attribute\n");
break;
case O_WRONLY:
printf("New Write only attribute\n");
break;
case O_RDWR:
printf("New Read Write Attribute\n");
break;
default:
printf("New Somethng has gone wrong\n");
}
exit(0);
}
这是我的输出
文件属性为 1
只写属性
文件属性为 0
新的只读属性
有人可以告诉我设置更新标志的正确方法吗?我参考了文档,但仍然不太清楚。